Android點擊事件通過kotlin幾種實現方式總結


一般來說,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:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">


<Button
android:id="@+id/btTest"
android:text="Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content" tools:layout_editor_absoluteY="421dp"
tools:layout_editor_absoluteX="167dp"
android:onClick="onTest"

/>

</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

}
}

Lambda表達式在Kotlin中怎樣工作的:setOnClickListener的轉換(KAD 18)

Android打造萬能自定義陰影控件





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM