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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/478819.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据库专题(基础)

前言 本专题主要记录自己最近学的数据库,有兴趣一起补习的可以一起看看,有补充和不足之处请多多指出。希望专题可以给自己还有读者带去一点点提高。 数据库基本概念 本模块有参考:数据库基本概念-CSDN博客 数据库管理系统是一个由互相关联的…

Pake一键打包,轻松构建桌面级应用!

Pake:顷刻之间,智能封装——WEB到桌面瞬间联通,让网站应用像搭积木般部署 - 精选真开源,释放新价值。 概览 Pake,作为一款新颖且极具创新性的桌面应用开发框架,凭借其独特的技术路径和高效的实现方式&…

【python】flask请求钩子,主动抛出异常与异常捕获

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

头部银行 AI 落地实践|数据应用赋能经营管理闭环

数据要素在银行各业务领域和流程中发挥着至关重要的作用,面对激烈的市场竞争和客户需求,银行越来越注重从数据管理中寻求效益和增值,深入洞察市场动态和客户需求,从而优化其产品与服务,提升运营效率和市场营销的成效。…

《妈妈是什么》笔记(二) 让孩子自己做选择

经典摘录 孩子也会需要独立的空间做事情,求独立、求空间、求私隐 对于不管因为什么,别人在受到肯定和赞赏的时候,会对我们自己的心理带来因“比较”而产生的不适感甚至嫉妒感,进而在行为上影响了我们自己的节奏,产生一…

RabbitMQ是怎么做消息分发的?

标题RabbitMQ是怎么做消息分发的? RabbitMQ一共有6中工作模式(消息分发模式),分别是简单模式、工作队列模式、发布订阅模式、路由模式、主题模式、以及RPC模式。 简单模式是最基本的工作模式,也是最简单的消息传递模…

[Java、Android面试]_11_线程的启动方式和区别

文章目录 1. 继承Thread类2. 实现Runnable接口3. 实现Callable接口4. 使用Executor框架4. 四者的区别 本人今年参加了很多面试,也有幸拿到了一些大厂的offer,整理了众多面试资料,后续还会分享众多面试资料。 整理成了面试系列,由于…

DXP学习2- 绘制电气图【实验】

目录 一、实验目的 二、实验原理 1、创建一个新的项目文件。 2、新建原理图文件 3、设置原理图选项 4、放置元器件 5、其他电路元素的放置 6、对所有电路元素属性参数值的修改 三、实验设备 四、实验内容 1、绘制实验图2-1 元器件所在位置: 1,…

炒伦敦金大师级的交易技术

交易中的反身性由投资大师索罗斯提出,简单来说,它所描述的是投资者与市场之间那种奇妙的互动和互相影响的关系。大家可以把伦敦金市场趋势,想象成一个很大的舞台,它会影响和决定投资者的心理预期和决策。 而投资者的心理预期和决策…

【C++】Qt:WebSocket客户端示例

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍WebSocket客户端示例。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路&…

k8s-kubectl命令详解、Pod创建过程、Pod的生命周期、定制Pod、资源对象文件

集群管理 一、如何管理集群 kubectl是用于管理Kubernetes集群的命令行工具 二、语法格式: kubectl [command] [TYPE] [NAME] [flags] command:子命令,如create,get,describe,delete type:…

redis集群数据一致性如何保证?

一般的做法是对key进行hash,比如有4台机器,就对4取模。 这样的坏处是增加或者减少机器的时候,会有大量数据进行迁移。 业界做法是用一致性哈希算法,将机器节点的ip值,对一个很大的数取模比如2^32, 用一个…

Prometheus 配置Basic auth认证

官方配置说明: Basic auth | Prometheus 一、生成密码加密串 Prometheus于2.24版本(包括2.24)之后提供Basic Auth功能进行加密访问,在浏览器登录UI的时候需要输入用户密码,访问Prometheus api的时候也需要加上用户密…

优质的短效HTTP代理具备什么优点?

随着网络时代的蓬勃发展,数据的获取与处理成为了企业决策和市场竞争的关键。在这场数据的角逐中,优质的短效HTTP代理脱颖而出,备受业界瞩目。优质的短效HTTP代理,提供了稳定的网络连接和匿名性,更为数据采集提供了关键…

Echarts组件初步封装

一、业务场景: 最近在vue中使用echarts时 有多处需要用到各种图表,想着自己封装一个便于多次复用 为了避免大家走弯路,为大家整理了一下,粘走可以直接用的那种 二、具体实现步骤: 1、先在终端安装echarts npm install…

管理类联考–复试–英文面试–问题--规划介绍原因做法--纯英文版

借鉴 https://www.bilibili.com/video/BV1Dk4y187zN/?p4&spm_id_from333.880.my_history.page.clickhttps://www.bilibili.com/video/BV1Dk4y187zN/?p4&spm_id_from333.880.my_history.page.click https://ttsreader.com/zh/https://ttsreader.com/zh/ 规划 视频版…

一文掌握Java动态代理的奥秘与应用场景

一、基本概念 为某个对象提供一个代理,以控制对这个对象的访问。代理类和委托类有共同的父类或父接口,这样在任何使用委托类对象的地方都可以用代理对象来替代。代理类负责请求的预处理、过滤、将请求分派委托类处理、以及委托类执行完请求后的后续处理。…

中国软件评测中心发布《健康软件安全白皮书》,美创参编分享方案实践

日前,中国软件评测中心网络安全和数据安全研究测评事业部发布《健康软件安全白皮书》研究成果,美创科技深度参与此次白皮书编写工作,针对健康软件目前面临的安全风险,分享数据安全建设思路。 白皮书详细剖析健康软件面临的网络和数…

盲盒抽卡机小程序:探索神秘盲盒,尽享抽卡乐趣

在盲盒文化的热潮中,盲盒抽卡机作为一种深受大众喜爱的娱乐形式,正逐渐成为市场上的新宠。为了满足广大盲盒爱好者和抽卡玩家的需求,我们积极投身于盲盒抽卡机小程序的开发,旨在通过创新的技术手段,为用户带来全新的盲…

PyTorch出现:RuntimeError: An attempt has been made to start a new process...报错

1.查看显卡: 第一步:同时按下键盘的winr键,输入cmd 第二步:随后输入 nvidia-smi 2.查看下载安装的包: conda list conda list 3.问题报错 PyTorch出现:RuntimeError: An attempt has been made to …