如何解决如何使用 kotlin 以单一方法获取 android 屏幕上按钮的所有事件?
我正在使用 kotlin 为我的 android 学习开发一个计算器。 为了让用户选择数字,我需要设置以下代码:
btn1.setOnClickListener({
var texto = txtDisplay.text.toString()
txtDisplay.setText(texto + "1")
})
btn2.setOnClickListener({
var texto = txtDisplay.text.toString()
txtDisplay.setText(texto + "2")
})
btn3.setOnClickListener({
var texto = txtDisplay.text.toString()
txtDisplay.setText(texto + "3")
})
btn4.setOnClickListener({
var texto = txtDisplay.text.toString()
txtDisplay.setText(texto + "4")
})
btn5.setOnClickListener({
var texto = txtDisplay.text.toString()
txtDisplay.setText(texto + "5")
})
btn6.setOnClickListener({
var texto = txtDisplay.text.toString()
txtDisplay.setText(texto + "6")
})
btn7.setOnClickListener({
var texto = txtDisplay.text.toString()
txtDisplay.setText(texto + "7")
})
btn8.setOnClickListener({
var texto = txtDisplay.text.toString()
txtDisplay.setText(texto + "8")
})
btn9.setOnClickListener({
var texto = txtDisplay.text.toString()
txtDisplay.setText(texto + "9")
})
btn0.setOnClickListener({
var texto = txtDisplay.text.toString()
txtDisplay.setText(texto + "0")
})
是否可以将单个类或方法中所有按钮的事件处理集中化?
我想要一个通用的解决方案来减少代码
有人知道解决办法吗?
解决方法
一种方法是为点击监听器创建一个新类:
private class MyButtonClickListener(
private var txtDisplay: TextView,private var s: String
) : View.OnClickListener {
override fun onClick(v: View?) {
txtDisplay.text = txtDisplay.text.toString() + s
}
}
然后将其用作:
btn1.setOnClickListener(MyButtonClickListener(txtDisplay,"1"))
btn2.setOnClickListener(MyButtonClickListener(txtDisplay,"2"))
等等..
,这是在 kotlin 中处理点击事件的标准方法。 在您的类中创建函数单击侦听器。在 onCreate 函数中调用此函数。
private fun clickListeners()
{
btn1.setOnClickListener(this)
btn2.setOnClickListener(this)
}
将 OnclickListner 扩展到您的活动/片段。
class A: AppCompatActivity(),View.OnClickListener{
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// call onclick listener function
clickListeners()
}
}
然后覆盖 onClick 函数并编写您的 onClick 逻辑。
override fun onClick(v: View?) {
when (v?.id) {
R.id.btn1-> {
txtDisplay.text = txtDisplay.text.toString() +"1"
}
R.id.btn2-> {
txtDisplay.text = txtDisplay.text.toString() +"2"
}
}
}
,
我建议使用这种方法来设置 onClick 侦听器。
1.创建 onClick 监听器:
private class MyButtonClickListener(
private var txtDisplay: TextView,private var s: String
) : View.OnClickListener {
override fun onClick(v: View?) {
txtDisplay.text = txtDisplay.text.toString() + s
}
}
2.然后在按钮上使用迭代并将 onClick 侦听器应用于它们:
val btns = arrayOf(btOne,btTwo,btThree,...)
for(int i = 1; i <= btns.size; ++i) {
btns[i].setOnClickListener(MyButtonClickListener(txtDisplay,"$i"))
}
,
创建一个按钮数组然后你可以使用这个循环
for (i in 0..9) {
btn[i].setOnClickListener({
var texto = txtDisplay.text.toString()
txtDisplay.text = texto + i.toString()
})
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。