• Kotlin中使用ViewBinding绑定控件并添加点击事件


    效果

    在这里插入图片描述
    实现源码

    class MainActivity : AppCompatActivity() {
        lateinit var binding:ActivityMainBinding
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            //setContentView(R.layout.activity_main)
            binding = ActivityMainBinding.inflate(layoutInflater)
            setContentView(binding.root)
            binding.button.text = "Hello"
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    1、加入依赖

    在app 的 build.gradle 文件下的 android 标签下加入下面的代码
    可以在Java / Kotlin语言中均可以使用,配置:

    android {
    	.......
       buildFeatures {
            viewBinding true
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    只在Kotlin语言版本中配置:

       android {
            ...
            viewBinding {
                enabled = true
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2、与控件进行绑定

    以下演示一个按钮绑定
    xml文件

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        
        <Button
            android:id="@+id/exitButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="退出软件" />
    
    </LinearLayout>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在 Activity 中使用视图绑定

    如需设置绑定类的实例以供 Activity 使用,请在 Activity 的 onCreate() 方法中执行以下步骤:

    1. 在Kotlin代码中使用ViewBinding.inflate方法获取绑定对象,并使用该对象访问布局文件中的控件
    2. setContentView(binding.root) 设置布局文件
    class MainActivity : AppCompatActivity() {
        lateinit var binding:ActivityMainBinding
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
        //    setContentView(R.layout.activity_main)
            binding = ActivityMainBinding.inflate(layoutInflater)
            setContentView(binding.root)
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3、监听控件

    使用setOnClickListener方法为控件添加点击事件

    class MainActivity : AppCompatActivity() {
        lateinit var binding:ActivityMainBinding
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
        //    setContentView(R.layout.activity_main)
            binding = ActivityMainBinding.inflate(layoutInflater)
            setContentView(binding.root)
    
            binding.exitButton.setOnClickListener {
                // 点击事件处理逻辑
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    比如:
    点击一次按钮就会打印一次“点击了按钮”

    class MainActivity : AppCompatActivity() {
        lateinit var binding:ActivityMainBinding
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            //setContentView(R.layout.activity_main)
            binding = ActivityMainBinding.inflate(layoutInflater)
            setContentView(binding.root)
            binding.button.setOnClickListener{
                Log.e("MainActivity","点击了按钮")
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

  • 相关阅读:
    Python Coroutine 池化实现
    【科学文献计量】GC.networkCoInvestigator()和GC.networkCoInvestigator()中的参数解释
    解决跨域的几种方式
    爪哇,我初窥门径
    [NCTF2019]Fake XML cookbook-1|XXE漏洞|XXE信息介绍
    【问题记录】解决Qt连接MySQL报“QMYSQL driver not loaded”以及不支持MySQL事务操作的问题!
    当添加一个键值对元素时,HashMap发生了什么?
    面试卡在多线程?那就分享几道 Java 多线程高频面试题,面试不用愁
    矩阵求导中的分子布局和分母布局
    【深度学习】详解 ViLT
  • 原文地址:https://blog.csdn.net/weixin_74239923/article/details/134038139