zoukankan      html  css  js  c++  java
  • 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打造万能自定义阴影控件




  • 相关阅读:
    【BZOJ1006】神奇的国度(弦图)
    弦图
    【BZOJ2946】公共串(后缀数组)
    【POJ1743】Musical Theme(后缀数组)
    JAVA和Tomcat运维整理
    linux shell 之if-------用if做判断
    Linux curl命令详解
    Intel HEX文件解析
    Linux bridge-utils tunctl 使用
    怎样查询锁表的SQL
  • 原文地址:https://www.cnblogs.com/it-tsz/p/11626309.html
Copyright © 2011-2022 走看看