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 知识体系 Android 视图绑定方案 ViewBinding DataBinding 省掉 findViewById 无需改 XML 数据 ↔ UI 绑定 支持表达式 选择建议:简单页面用 ViewBinding,复杂数据驱动用 DataBinding 两者可共存,DataBinding 兼容 ViewBinding 所有功能

这张图把咱们今天讲的内容都串起来了。左边是 ViewBinding 的轻量路线,右边是 DataBinding 的完整方案。底部是我给你的选择建议,记牢了。

好了,第一章就到这里。配置好环境之后,下一章咱们就开始写代码实战了。到时候你会真正感受到,没有 findViewById 的世界有多美好。


公众号:蓝海资料掘金营,微信deep3321