kotlin中使用ViewBinding绑定控件

kotlin中使用ViewBinding绑定控件

什么是ViewBinding?

  • View Binding是Android Studio 3.6推出的新特性,主要用于减少findViewById的冗余代码,但内部实现还是通过使用findViewById。通过ViewBinding,可以更轻松地编写可与视图交互的代码。在模块中启用ViewBinding之后,系统会为该模块中的每个 XML 布局文件生成一个绑定类,绑定类的实例包含对在相应布局中具有 ID 的所有视图的直接引用。
  • 在之前的项目中我们可以通过kotlin-android-extensions插件来绑定View控件的,很遗憾在Android Studio 4.1之后kotlin-android-extensions插件已被废弃,现在推荐使用ViewBinding来进行替代。
  • 注意:视图绑定在 Android Studio 3.6 Canary 11 及更高版本中可用

配置ViewBinding

  1. 在app级别的build.gradle中的android闭包中添加buildFeatures,设置viewBinding 为 true
android {
    namespace xxx

    compileSdkVersion versions.compileSdk
    defaultConfig {
        ...
    }

    compileOptions {
        ...
    }

    buildFeatures{
        viewBinding true
    }
}
  1. 配置完成后 Sync一下gradle,编译项目后会在build→generated→data_binding_base_class_source_out文件中生成相应的类。Binding类的命名规则是将布局文件按驼峰方式重命名后,再加上Binding作为结尾。例如,我们activity_main.xml布局对应的Binding类就是ActivityMainBinding。
    在这里插入图片描述

  2. 如果有些布局文件你不希望为它生成对应的Binding类,可以在该布局文件的根元素位置加入
    tools:viewBindingIgnore="true"

在这里插入图片描述

使用ViewBinding

  • 在Activity使用viewbing,如下代码所示。注意:我们需要先Binding类的getRoot方法获取到对应布局文件的根元素,然后将其传入到setContentView方法中,否则设置监听事件会无法生效
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        //初始化ViewBinding控件
        var myBinding = ActivityMainBinding.inflate(layoutInflater)
        //把根元素的对象作为参数传入到setContentView()方法中
        setContentView(myBinding.root)
        //botton是activity_main.xml中的一个按钮id
        myBinding.botton.setOnClickListener {
			//Code Logic
        }
       
    }
}

相关推荐

  1. WPF将多个函数返回值分别至界面

    2024-03-22 16:06:02       37 阅读
  2. WPF:密码框MVVM

    2024-03-22 16:06:02       27 阅读
  3. C#WPFLabel宽度到父的宽度

    2024-03-22 16:06:02       35 阅读
  4. Android Kotlin Viewbinding封装

    2024-03-22 16:06:02       52 阅读
  5. vue

    2024-03-22 16:06:02       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-22 16:06:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-22 16:06:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-22 16:06:02       87 阅读
  4. Python语言-面向对象

    2024-03-22 16:06:02       96 阅读

热门阅读

  1. Unity构建详解(1)——SBP介绍

    2024-03-22 16:06:02       46 阅读
  2. unity自动引用生成

    2024-03-22 16:06:02       45 阅读
  3. ChatGPT:如何利用人工智能写出高质量论文

    2024-03-22 16:06:02       42 阅读
  4. LeetCode刷题——347. 前 K 个高频元素

    2024-03-22 16:06:02       45 阅读
  5. 下载NLP_gluedata数据集的脚本

    2024-03-22 16:06:02       36 阅读
  6. 类似于 FastAdmin的快速后台开发框架都有哪些

    2024-03-22 16:06:02       40 阅读
  7. k8s工作节点主要模块

    2024-03-22 16:06:02       39 阅读
  8. 大数据开发(HBase真题)

    2024-03-22 16:06:02       35 阅读
  9. Puppet 2024年度报告:平台工程发掘 DevOps 无限潜质

    2024-03-22 16:06:02       42 阅读
  10. 后台发送GET/POST方法

    2024-03-22 16:06:02       42 阅读
  11. Qt Excel文件读写

    2024-03-22 16:06:02       39 阅读
  12. 9. Linux 信号详解

    2024-03-22 16:06:02       46 阅读