如何使用 kotlin 以单一方法获取 android 屏幕上按钮的所有事件?
How can I get all the events of the buttons on a screen on android in a single method using the kotlin?
我正在为 android 学习使用 kotlin 开发一个计算器。
要向用户获取数字 select,我需要设置以下代码:
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")
})
是否可以将所有按钮的事件处理集中在单个 class 或方法中?
我想一个通用的解决方案来减少代码
有人知道解决办法吗?
一种方法是为点击侦听器创建一个新的 class:
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"))
等等..
创建一个按钮数组然后你就可以使用这个循环
for (i in 0..9) {
btn[i].setOnClickListener({
var texto = txtDisplay.text.toString()
txtDisplay.text = texto + i.toString()
})
}
我建议使用这种方法来设置 onClick 侦听器。
1.Create 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.And 然后对按钮使用迭代并对它们应用 onClick 侦听器:
val btns = arrayOf(btOne, btTwo, btThree, ...)
for(int i = 1; i <= btns.size; ++i) {
btns[i].setOnClickListener(MyButtonClickListener(txtDisplay, "$i"))
}
这是在 kotlin 中处理点击事件的标准方式。
在 Class 中创建函数点击监听器。在 onCreate 函数中调用此函数。
private fun clickListeners()
{
btn1.setOnClickListener(this)
btn2.setOnClickListener(this)
}
将 OnclickListner 扩展到您的 Activity/Fragment。
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"
}
}
}
我正在为 android 学习使用 kotlin 开发一个计算器。 要向用户获取数字 select,我需要设置以下代码:
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")
})
是否可以将所有按钮的事件处理集中在单个 class 或方法中?
我想一个通用的解决方案来减少代码
有人知道解决办法吗?
一种方法是为点击侦听器创建一个新的 class:
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"))
等等..
创建一个按钮数组然后你就可以使用这个循环
for (i in 0..9) {
btn[i].setOnClickListener({
var texto = txtDisplay.text.toString()
txtDisplay.text = texto + i.toString()
})
}
我建议使用这种方法来设置 onClick 侦听器。
1.Create 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.And 然后对按钮使用迭代并对它们应用 onClick 侦听器:
val btns = arrayOf(btOne, btTwo, btThree, ...)
for(int i = 1; i <= btns.size; ++i) {
btns[i].setOnClickListener(MyButtonClickListener(txtDisplay, "$i"))
}
这是在 kotlin 中处理点击事件的标准方式。 在 Class 中创建函数点击监听器。在 onCreate 函数中调用此函数。
private fun clickListeners()
{
btn1.setOnClickListener(this)
btn2.setOnClickListener(this)
}
将 OnclickListner 扩展到您的 Activity/Fragment。
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"
}
}
}