I am developing a Calculator for my android learning using kotlin. To get the numbers select to users, I need to set the code below:
JavaScript
x
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")
})
Is it possible to centrelize the event handling of all buttons in the single class or method?
I would like to a generic solution to reduce the code
Does anyone know a solution?
Advertisement
Answer
this is a standard way to handle click events in kotlin. create Function click listeners in your Class. call this function in onCreate function.
JavaScript
private fun clickListeners()
{
btn1.setOnClickListener(this)
btn2.setOnClickListener(this)
}
extend OnclickListner to your Activity/Fragment.
JavaScript
class A: AppCompatActivity(),View.OnClickListener{
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// call onclick listener function
clickListeners()
}
}
then override onClick function and write your onClick Logic.
JavaScript
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"
}
}
}