一般来说,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打造万能自定义阴影控件



Android点击事件通过kotlin几种实现方式总结的更多相关文章

  1. Android监听点击事件实现的三种方法

    监听点击事件实现的三种方法:1.匿名内部类2.外部类3.直接实现接口 1.匿名内部类: package com.jereh.calculator; import android.content.Con ...

  2. android点击事件的四种方式

    android点击事件的四种方式 第一种方式:创建内部类实现点击事件 代码如下: package com.example.dail; import android.text.TextUtils; im ...

  3. Android中点击事件的四种写法详解

    Android中点击事件的四种写法 使用内部类实现点击事件 使用匿名内部类实现点击事件 让MainActivity实现View.OnClickListener接口 通过布局文件中控件的属性 第一种方法 ...

  4. 事件处理之二:点击事件监听器的五种写法 分类: H1_ANDROID 2013-09-11 10:32 4262人阅读 评论(1) 收藏

    首选方法二! 方法一:写一个内部类,在类中实现点击事件 1.在父类中调用点击事件 bt_dail.setOnClickListener(new MyButtonListener()); 2.创建内部类 ...

  5. Android点击事件

    Android点击事件 备注 全局实现View.OnClickListener 或许需要将MainActivity设置为public 注册事件 btn_login.setOnClickListener ...

  6. 巨蟒python全栈开发数据库前端6:事件onclick的两种绑定方式&&onblur和onfocus事件&&window.onload解释&&小米商城讲解

    1.回顾上节内容(JavaScript) 一.JavaScript概述 1.ECMAScript和JavaScript的关系 2.ECMAScript的历史 3.JavaScript是一门前后端都可以 ...

  7. js中的点击事件(click)的实现方式

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  8. Android图表库MPAndroidChart(六)——换一种思考方式,水平条形图的实现过程

    Android图表库MPAndroidChart(六)--换一种思考方式,水平条形图的实现过程 一.基本实现 我们之前实现了条形图,现在来看下水平条形图是怎么实现的,说白了就是横起来,看下效果: 说起 ...

  9. 中央事件总线 事件驱动架构(EDA) 解析事件总线的4种实现方式

    事件驱动架构(EDA)https://mp.weixin.qq.com/s/nA8XFD2Rx_7qA_LxltGGHw https://mp.weixin.qq.com/s/cD3auglgKzOb ...

随机推荐

  1. node gm图片操作

    1,安首先要安装 GraphicsMagick或者ImageMagick 2,npm install gm   --save 3,编码测试 var fs = require('fs') //graph ...

  2. 使用LM386制作Arduino音乐播放器

    在我们的项目中添加声音或音乐总是会使其看起来更酷一些,听上去更有吸引力.特别是如果您使用的是Arduino开发板,并且有很多空余的引脚,只需要添加一个SD卡模块和一个普通的扬声器即可轻松添加音效.在本 ...

  3. Educational Codeforces Round 71 (Rated for Div. 2)-F. Remainder Problem-技巧分块

    Educational Codeforces Round 71 (Rated for Div. 2)-F. Remainder Problem-技巧分块 [Problem Description] ​ ...

  4. selenium常用的API(二)浏览器窗口设置

    浏览器窗口最大化 # encoding=utf-8 from selenium import webdriver driver = webdriver.Ie(executable_path=" ...

  5. 什么情况下使用large training data会非常有效

    收集大量的数据可能比算法的优劣更重要 Banko和Brill在2001年做了一个研究,是关于在句子中对易混单词进行识别,画出了上图的右边的那个图,这个图显示了对于不同的算法,它们的表现相似,但是随着t ...

  6. sql注入和防sql注入

    sql注入: from pymysql import * def main(): # 创建连接 conn = connect(host="127.0.0.1", port=3306 ...

  7. webpack起服务器报JavaScript heap out of memory

    配置如下: { "scripts": { "start": "node --max_old_space_size=4096 node_modules/ ...

  8. tcp三次握手,四次挥手的形象类比图

  9. 关于Djiango中 前端多对多字段点(,)的显示问题

    去除点的方法: <td> {% for roles_son in roles.permissions.all %} {% if forloop.last %} # 利用模板语言中的循环机制 ...

  10. Requset作用域

    案例:当登陆密码或账号不正确时 提示 使用Requset对象中的作用域存储数据 语法:req.setAttribute(key, value);//键值对存在 当密码不存在时,设置作用域 else { ...