数据绑定库   Android Jetpack 的一部分。

数据绑定库是一个支持库,它允许您使用声明性格式而不是以编程方式将布局中的 UI 组件绑定到应用中的数据源。

布局通常在活动中使用调用 UI 框架方法的代码进行定义。例如,以下代码调用 findViewById() 以查找 TextView 小部件并将其绑定到 viewModel 变量的 userName 属性

Kotlin

findViewById<TextView>(R.id.sample_text).apply {
    text = viewModel.userName
}

Java

TextView textView = findViewById(R.id.sample_text);
textView.setText(viewModel.getUserName());

以下示例显示了如何使用数据绑定库直接在布局文件中为小部件分配文本。这消除了调用上面显示的任何 Java 代码的需要。请注意赋值表达式中 @{} 语法的使用

<TextView
    android:text="@{viewmodel.userName}" />

在布局文件中绑定组件使您可以删除活动中的许多 UI 框架调用,从而使它们更简单且更易于维护。这还可以提高应用的性能,并有助于防止内存泄漏和空指针异常。

使用数据绑定库

使用以下页面了解如何在 Android 应用中使用数据绑定库。

入门
了解如何准备您的开发环境以使用数据绑定库,包括在 Android Studio 中支持数据绑定代码。

布局和绑定表达式

表达式语言允许您编写将变量连接到布局中视图的表达式。数据绑定库会自动生成绑定布局中视图与数据对象所需的类。该库提供了导入、变量和包含等功能,您可以在布局中使用这些功能。

库的这些功能与您现有的布局无缝共存。例如,可以在表达式中使用的绑定变量是在 UI 布局根元素的同级元素 data 元素内部定义的。这两个元素都包装在 layout 标记中,如下例所示

<layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">
    <data>
        <variable
            name="viewmodel"
            type="com.myapp.data.ViewModel" />
    </data>
    <ConstraintLayout... /> <!-- UI layout's root element -->
</layout>

使用可观察数据对象
数据绑定库提供了一些类和方法,可以轻松地观察数据的变化。您无需担心底层数据源发生变化时UI的刷新问题。您可以将您的变量或其属性设置为可观察的。该库允许您使对象、字段或集合可观察。
生成的绑定类
数据绑定库会生成绑定类,用于访问布局的变量和视图。此页面将向您展示如何使用和自定义生成的绑定类。
绑定适配器
对于每个布局表达式,都存在一个绑定适配器,它执行框架调用以设置相应的属性或监听器。例如,绑定适配器可以处理调用setText()方法来设置文本属性,或调用setOnClickListener()方法来为点击事件添加监听器。最常见的绑定适配器(例如本页面示例中使用的android:text属性的适配器)可供您在android.databinding.adapters包中使用。有关常见绑定适配器的列表,请参阅adapters。您还可以创建自定义适配器,如下例所示。

Kotlin

@BindingAdapter("app:goneUnless")
fun goneUnless(view: View, visible: Boolean) {
    view.visibility = if (visible) View.VISIBLE else View.GONE
}

Java

@BindingAdapter("app:goneUnless")
public static void goneUnless(View view, Boolean visible) {
    view.visibility = visible ? View.VISIBLE : View.GONE;
}
将布局视图绑定到架构组件
Android 支持库包含架构组件,您可以使用它们来设计健壮、可测试和易于维护的应用。您可以将架构组件与数据绑定库结合使用,进一步简化 UI 的开发。
双向数据绑定
数据绑定库支持双向数据绑定。此类型绑定的表示法支持接收属性的数据更改,并同时监听用户对该属性的更新。

其他资源

要了解有关数据绑定的更多信息,请参阅以下其他资源。

示例

Codelabs

博文