科特林:变量未解决的参考实例化从类

问题描述 投票:0回答:2

我做的听力训练应用程序,并希望各级要定制。所以,我有每个12个音调的相同功能的类,所以想象setDb,SETD,setEb等:

class MakeLevel(context: Context) {
    fun setC(something: Boolean): Boolean {
        var c = something
        return c
    }

然后,我实例化类在我的主要活动(FullscreenActivity):

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_fullscreen)
    makeLevel = MakeLevel(this)
}
companion object {
    lateinit var makeLevel: MakeLevel
}

然后,在该级别中选择的片段,我这样做:

override fun onResume() {
    super.onResume()
    majpentlevelbutton.setOnClickListener { view ->
        FullscreenActivity.makeLevel.setC(true)
        // [same for setD, setE, setG and setA, and false for all the other notes]
        view.findNavController().navigate(R.id.action_levelSelectFragment_to_chromaticFragment)
    }
}

现在,这里是我的问题:我想访问c的值,以确定是否疗法声音和对C按钮应该被载入或没有,我不能找到一个方法来做到这一点。举例来说,我倒是喜欢用这样的:

if (c == true) {
    c_button.visibility = View.VISIBLE
}
else {
    c_button.visibility = View.GONE
}

从来就试图cmakeLevel.cFullscreenActivity.makeLevel.c等等。每当我得到一个Unresolved reference。所以我的问题是如何获取的变种C参?

android class kotlin reference instance
2个回答
2
投票

到目前为止c只是方法setC内的局部变量。如果你需要的方法之外的价值,你需要定义一个属性:

class MakeLevel(context: Context) {
    var c = initValue
    fun setC(something: Boolean){
        c = something
    }
}

FullscreenActivity.makeLevel.c:现在,您可以访问这个变量


0
投票

你的问题是,你正在试图访问其范围的变量之外。

class MakeLevel(context: Context) {
    private var c = initValue

    fun setC(something: Boolean){
        c = something
    }

    fun getC(something: Boolean) {
        return c
    }

    if (getC() == true) 
        c_button.visibility = View.VISIBLE
    else 
       c_button.visibility = View.GONE
}
© www.soinside.com 2019 - 2024. All rights reserved.