【问题标题】:Kotlin: Unresolved Reference for variable from instantiated classKotlin:来自实例化类的变量的未解决参考
【发布时间】:2019-02-10 12:34:30
【问题描述】:

我制作了一个听力训练应用,并希望可以自定义级别。所以我有一个类对 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 的引用?

【问题讨论】:

    标签: android class kotlin reference instance


    【解决方案1】:

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

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

    现在您可以通过以下方式访问此变量:FullscreenActivity.makeLevel.c

    【讨论】:

    • 注意:在这种情况下,没有setC 方法的意义,你只需写FullscreenActivity.makeLevel.c = whatever
    【解决方案2】:

    您的问题是您试图访问其范围之外的变量。

    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
    }

    【讨论】:

      猜你喜欢
      • 2018-03-27
      • 1970-01-01
      • 1970-01-01
      • 2018-10-25
      • 1970-01-01
      • 1970-01-01
      • 2021-10-29
      • 2018-10-16
      • 2023-03-25
      相关资源
      最近更新 更多