我刚开始学习Kotlin,目前正在为Android开发一个简单的Quiz应用程序。用户可以使用存储在阵列中的四个按钮选择答案。该程序包含一个函数,该函数应检查是否单击了正确的按钮并返回相应的布尔值:
fun checkAnswer (solution: Int): Boolean {
for (z in answerButtons.indices) {
answerButtons[z].setOnClickListener{
return z == solution
}
}
}
现在,我知道此return
不起作用,但是我无法找到一种方法,该方法取决于单击了“ wicht”按钮。如果有人可以在这里帮助我,我将非常感激。谢谢!
答案 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()
}
}
}
如果这是一个真实的应用程序,我还建议将检查答案的逻辑推入模型层以保持强烈的关注点分离。