Kotlin: неразрешенная ссылка на переменную из экземпляра класса - PullRequest
0 голосов
/ 10 февраля 2019

Я создаю приложение для тренировки слуха и хочу, чтобы уровни были настраиваемыми.Итак, у меня есть класс с одинаковой функцией для каждого из 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
}

Я пробовал c, makeLevel.c, FullscreenActivity.makeLevel.c и многие другие.Каждый раз, когда я получаю Unresolved reference.Поэтому мой вопрос: как мне получить ссылку на var c?

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Ваша проблема в том, что вы пытаетесь получить доступ к переменной вне ее области действия.

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
}
0 голосов
/ 10 февраля 2019

Пока c является только локальной переменной в методе setC.Если вам нужно значение вне метода, вам нужно определить свойство:

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

Теперь вы можете получить доступ к этой переменной с помощью: FullscreenActivity.makeLevel.c

...