目录

  • 简介
  • 使用
    • 使用说明
    • 开始使用
  • 用法
  • ViewBinding 与 findViewById 的区别
  • ViewBinding 与 DataBinding 的区别
  • ViewBinding 与 DataBinding 应该使用哪一个?

简介

Android 中的 ViewBinding 是Android 的 Jetpack 的一部分。这个框架为的是让大家不用再写出特别多的 findViewById 代码找寻控件。如果使用这个框架,那么框架会为每个xml布局生成一个绑定类。绑定类的实例包含对在相应布局中具有 ID 的所有视图的直接引用。
当然在官方文档中有一句这个话:
In most cases, view binding replaces findViewById.
(在大多数情况下,视图绑定会替代 findViewById。)
这里介绍一下,因为 ViewBing 是新出来的原因,所以往往会有些不稳定,出现某些不知道的问题,所以我还是告诫大家:这个毕竟是新的技术,所以在工作中还是不要上手了,在平时的Demo 中可以使用它。

使用

使用说明

ViewBinding 对于 studio 和 gradle 都有限制。都规定需要使用 3.6.0 以上的版本。

开始使用

首先如果需要使用 架构组件,那么大家需要在 project 的build.gradle 中有 google()。(当然这个是在创建应用的时候就会默认有的。)

  repositories {         google()        jcenter()            }

如果使用 ViewBinding,需要在 Module 的 build.gradle 中添加如下:

android {  viewBinding {        enabled = true    }}

或者是

android {    viewBinding.enabled = true    }

用法

ViewBinding 在大家设置完之后就可以正式的使用了。
比如应用会默认生成一个 MainActivity 和一个 activity_main.xml 布局。那么大家就可以在代码中如此使用:

class MainActivity : AppCompatActivity() {    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        val mBinding = ActivityMainBinding.inflate(layoutInflater)        setContentView(mBinding.root)    }}

这里解释一下,它会将 XML 文件的名称转换为驼峰式大小写,并在末尾添加“Binding”一词。
如果有一个布局内容如下 :

<?xml version="1.0" encoding="utf-8"?>            

这里大家可以看到,这个布局整体是一个 玉树布局,内部有三个控件 TextView ,Button ,ImageView 。他们有着自己各自的id,如果我们想在代码中进行使用,那么我们可以通过之前的 mBinding.控件找到自己所需要控件/.

如果不想让xml 文件生成Binding ,那么大家可以在根布局中添加 tools:viewBindingIgnore=“true” 忽略布局。

ViewBinding 与 findViewById 的区别

与使用 findViewById 相比,视图绑定具有一些很显著的优点:

  • Null 安全:由于视图绑定会创建对视图的直接引用,因此不存在因视图 ID 无效而引发 Null 指针异常的风险。此外,如果视图仅出现在布局的某些配置中,则绑定类中包含其引用的字段会使用 @Nullable 标记。
  • 类型安全 :每个绑定类中的字段均具有与它们在 XML 文件中引用的视图相匹配的类型。这意味着不存在发生类转换异常的风险。

ViewBinding 与 DataBinding 的区别

视图绑定和数据绑定库均会生成可用于直接引用视图的绑定类。不过,这两者之间存在明显差异:

  • 数据绑定库仅处理使用 代码创建的数据绑定布局。
  • 视图绑定不支持布局变量或布局表达式,因此它不能用于在 XML 中将布局与数据绑定。

ViewBinding 与 DataBinding 应该使用哪一个?

在官方文档中给出如此的建议:
如果使用的是简单的布局(和数据交互少的布局),那么推荐使用 ViewBinding。
如果使用的是复杂的布局(和数据交互多的布局),那么推荐使用 DataBinding。

更多相关文章

  1. 箭头函数的基础使用
  2. NPM 和webpack 的基础使用
  3. Python list sort方法的具体使用
  4. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  5. Android(安卓)下使用 JSON 实现 HTTP 请求
  6. Android中图像的几何变化中Matrix的使用
  7. 2018年Android最新面试题(一)
  8. Android本地的Content Provider
  9. android中Layoutopt的使用

随机推荐

  1. MapMe
  2. Android中打开多个Activity,返回到第一个A
  3. 学习Android之用户界面基础
  4. Unity编译Android的原理解析和apk打包分
  5. ffmpeg2.2在ubuntu下使用NDK编译——并在
  6. Android倒计时定时器CountDownTimer的用
  7. 深入了解android平台的jni(一)
  8. android相册选择图片的编码实现
  9. Android源码分析:TabHost
  10. webapp打包为Android的apk包的一种方法