Kotlin: вернуть значение по нажатию кнопки - PullRequest
0 голосов
/ 19 сентября 2019

Я только начинаю изучать Kotlin, и в настоящее время я делаю простое приложение для викторины для Android.Пользователь может выбрать ответ с помощью четырех кнопок, которые хранятся в массиве.Программа содержит функции, которые должны проверять, нажата ли правильная кнопка, и возвращать соответствующее логическое значение:

fun checkAnswer (solution: Int): Boolean {
    for (z in answerButtons.indices) {
        answerButtons[z].setOnClickListener{
            return z == solution
        }
    }
}

Теперь я знаю, что это return не работает, но я просто не могунайти способ вернуть значение в зависимости от того, какая кнопка нажата.Если бы кто-нибудь мог помочь мне здесь, я был бы очень благодарен.Спасибо!

1 Ответ

0 голосов
/ 19 сентября 2019

Поэтому, когда вы вызываете setOnClickListener, компилятор Kotlin действительно абстрагирует некоторые важные детали.На самом деле происходит следующее:

setOnClickListener(object: View.OnClickListener {
            override fun onClick(v: View?) {
                doAThing()
            }
        })

Это SAM конструктор .Но, как вы можете видеть, тип возврата onClick - это Unit, и возвращать из анонимного объекта также не имеет смысла.Было бы полезно иметь больше контекста относительно того, почему вы структурировали свой код так, как вы это делаете, но вот потенциальное решение вашей проблемы:

// in onCreate
for (btn in answerButtons) {
    btn.setOnClickListener {
        if (btn.text == solution) {
            doTheThingWhenCorrectAnswer()
        } else {
            doTheThingWhenIncorrectAnswer()
        }
    }
}

Если бы это было реальное приложение, я бы дополнительно предложилвыдвигая логику для проверки ответов на уровне модели, чтобы поддерживать четкое разделение интересов.

...