Kotlin:实例化类的变量的未解析引用

时间:2019-02-10 12:34:31

标签: android class kotlin reference instance

我制作了一个耳部训练应用程序,希望该级别可自定义。所以我有一个对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。所以我的问题是如何获得有关var c的参考?

2 个答案:

答案 0 :(得分:2)

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

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

现在您可以使用以下命令访问此变量:FullscreenActivity.makeLevel.c

答案 1 :(得分: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
}