Kotlin:按一下按钮即可返回值

时间:2019-09-19 20:28:08

标签: android kotlin return onclicklistener

我刚开始学习Kotlin,目前正在为Android开发一个简单的Quiz应用程序。用户可以使用存储在阵列中的四个按钮选择答案。该程序包含一个函数,该函数应检查是否单击了正确的按钮并返回相应的布尔值:

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

现在,我知道此return不起作用,但是我无法找到一种方法,该方法取决于单击了“ wicht”按钮。如果有人可以在这里帮助我,我将非常感激。谢谢!

1 个答案:

答案 0 :(得分:0)

因此,当您调用setOnClickListener时,Kotlin编译器实际上是在提取一些重要的细节。实际情况是这样的:

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

这是SAM constructor。但是,正如您所看到的,onClick的返回类型是Unit,从匿名对象返回也没有意义。了解为什么要按自己的方式来组织代码,这会有所帮助,但这是解决问题的潜在方法:

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

如果这是一个真实的应用程序,我还建议将检查答案的逻辑推入模型层以保持强烈的关注点分离。

相关问题