1、ViewBinding与DataBinding概述:什么是ViewBinding、什么是DataBinding、两者对比与选择、环境配置与Gradle设置
各位同学,欢迎来到这门课的第一章。
说实话,每次带新人做项目,我都要花不少时间解释这两个东西。ViewBinding 和 DataBinding,名字很像,功能也有重叠,但本质上是两码事。今天咱们就把它们彻底掰扯清楚。
什么是 ViewBinding?
ViewBinding,说白了就是帮咱们省掉 findViewById 的重复劳动。
你想想看,以前写 Android 布局,每个控件都要手动绑定:
TextView tvName = findViewById(R.id.tv_name);
ImageView ivAvatar = findViewById(R.id.iv_avatar);
Button btnSubmit = findViewById(R.id.btn_submit);
一个页面十几个控件,光写这些就够烦的。而且一旦布局改了,还得回头改 Java/Kotlin 代码,很容易漏掉。
ViewBinding 的做法是:为每个 XML 布局文件自动生成一个绑定类。比如你的布局叫 activity_main.xml,它就会生成一个 ActivityMainBinding 类。这个类里,所有带 id 的控件都变成了它的属性,直接点出来就能用。
核心要点:ViewBinding 只做一件事——帮你省掉 findViewById。它不涉及数据绑定、不涉及双向绑定、不涉及表达式。简单、纯粹、高效。
我在项目中遇到过不少团队,从旧项目迁移到 ViewBinding 时,最大的感受就是「爽」。尤其是那种几百行的 Activity,删掉所有 findViewById 之后,代码瞬间清爽了。
什么是 DataBinding?
DataBinding 就比 ViewBinding 重多了。它不光能帮你省掉 findViewById,还能直接把数据绑定到 UI 上。
什么意思呢?举个例子:
<layout>
<data>
<variable
name="user"
type="com.example.User" />
</data>
<TextView
android:text="@{user.name}"
... />
</layout>
看到没?@{user.name} 这个写法,直接把 User 对象的 name 属性绑定到了 TextView 上。数据变了,UI 自动更新。反过来,UI 变了,数据也能自动更新(双向绑定)。
我记得第一次用 DataBinding 做表单时,简直惊了——以前要写一堆 TextWatcher 监听输入变化,现在一行表达式就搞定了。
小提示:DataBinding 支持在 XML 里写简单的表达式,比如三元运算符、字符串拼接、甚至调用静态方法。但别写太复杂,否则 XML 会变得很难维护。我见过有人把业务逻辑写在 XML 里……嗯,那场面,不太好看。
两者对比与选择
咱们用一张表来对比,这样更直观:
| 对比维度 | ViewBinding | DataBinding |
|---|---|---|
| 核心功能 | 省掉 findViewById | 数据 + UI 双向绑定 |
| XML 改动 | 无需改动 | 需要包裹在 <layout> 中 |
| 编译速度 | 快(只生成绑定类) | 稍慢(需要处理表达式) |
| 学习成本 | 几乎为零 | 中等(需要学表达式语法) |
| 适用场景 | 所有项目 | 需要数据驱动的复杂页面 |
那到底怎么选?我个人习惯是这样的:
- 简单页面(比如设置页、关于页):只用 ViewBinding,轻量快速。
- 复杂表单或列表(比如用户注册、订单填写):上 DataBinding,省掉大量样板代码。
- 新项目:我建议直接开启 DataBinding,因为它兼容 ViewBinding 的所有功能。你可以在同一个项目里混用,完全没问题。
注意:DataBinding 开启后,ViewBinding 会自动生效。但反过来不行。所以如果你不确定,直接开 DataBinding 是最稳妥的。
环境配置与 Gradle 设置
好了,理论说完了,咱们动手配置一下。
首先,确保你的项目用的是 Android Studio 4.0 以上版本。嗯,现在应该没人用更老的了。
在模块的 build.gradle(注意是 app 级别的,不是 project 级别的)里,添加如下配置:
开启 ViewBinding
android {
...
buildFeatures {
viewBinding = true
}
}
开启 DataBinding
android {
...
buildFeatures {
dataBinding = true
}
}
或者两个一起开:
android {
...
buildFeatures {
viewBinding = true
dataBinding = true
}
}
小技巧:如果你用的是 Kotlin,别忘了加上 kotlin-kapt 插件。DataBinding 的注解处理需要它。
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'kotlin-kapt' // 这个别忘了
}
配置完记得点一下「Sync Now」。我第一次配置时忘了同步,结果编译报错,找了半天才发现……嗯,这种低级错误大家应该不会犯吧?
知识体系总览
下面这张图,帮你把本章的核心逻辑串起来:
这张图把咱们今天讲的内容都串起来了。左边是 ViewBinding 的轻量路线,右边是 DataBinding 的完整方案。底部是我给你的选择建议,记牢了。
好了,第一章就到这里。配置好环境之后,下一章咱们就开始写代码实战了。到时候你会真正感受到,没有 findViewById 的世界有多美好。
公众号:蓝海资料掘金营,微信deep3321