【问题标题】:Kotlin: return a value on button clickKotlin:在按钮单击时返回一个值
【发布时间】:2020-01-20 22:21:30
【问题描述】:

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

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

现在我知道这个return 不起作用,但我只是找不到根据单击的按钮返回值的方法。如果有人可以在这里帮助我,我将不胜感激。谢谢!

【问题讨论】:

  • 你应该使用列表和膨胀/填充列表中的项目然后调用检查每个项目的点击

标签: android kotlin return onclicklistener


【解决方案1】:

所以当你调用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()
        }
    }
}

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

【讨论】:

    猜你喜欢
    • 2020-04-25
    • 1970-01-01
    • 2016-01-11
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    相关资源
    最近更新 更多