一般来说,Android点击事件通过kotlin有以下几种实现方式:
1.通过全局接口View.OnClickListener实现,代码如下
//
class MainActivity : AppCompatActivity(),View.OnClickListener{
//...
override fun onClick(v: View?) {
if(v?.id == R.id.btTest){
//do something
}
}
private var btTest: Button? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btTest = findViewById(R.id.btTest)
//way1
btTest?.setOnClickListener(this)
//。。。
}
2.通过简化得匿名函数(即lamda表达式),如下
class MainActivity : AppCompatActivity(){
class MainActivity : AppCompatActivity(){
//...
private var btTest: Button? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btTest = findViewById(R.id.btTest)
//way2s
btTest?.setOnClickListener {
//do something
}
//。。。
}
3.通过匿名函数,该方法容易理解,但是代码不简便,如下
class MainActivity : AppCompatActivity(){
//...
private var btTest: Button? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btTest = findViewById(R.id.btTest)
//way3
btTest?.setOnClickListener( fun (v:View):Unit{
//do something
})
//。。。
}
4.通过匿名函数为变量,该方法也容易理解,但是代码不够简便,如下
class MainActivity : AppCompatActivity(){
//...
private var btTest: Button? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btTest = findViewById(R.id.btTest)
//way4
fOnClicked= View.OnClickListener( fun(v:View):Unit{
//do something
} )
btTest?.setOnClickListener(fOnClicked)
//...
}
private lateinit var fOnClicked:View.OnClickListener
}
比较以上方法,方法1和方法2比较常用,具体按实际需求而定
当然除了上面几种用代码实现的View的点击事件,当然还有在activity布局文件xml中设置点击事件如下:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:andro
/>
</androidx.constraintlayout.widget.ConstraintLayout>
然后在对应得activity中添加点击事件处理功能函数如下:
//...
class MainActivity : AppCompatActivity(){
//...
private var btTest: Button? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btTest = findViewById(R.id.btTest)
//...
}
//
点击事件处理功能函数
public fun onTest(v:View){
//do something
}
}