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

数据绑定库是一个支持库,使您能够绑定界面 使用声明式方法将布局中的组件发送到应用中的数据源 而不是以编程方式

布局通常在 activity 中使用调用界面框架的代码进行定义 方法。例如,以下代码会调用 findViewById() 来查找 TextView widget 并将其绑定到userName viewModel 变量:

Kotlin

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

Java

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

以下示例展示了如何使用数据绑定库来分配文本 直接添加到该 widget 布局文件中。这样,您就无需调用 上面所示的 Java 代码请注意在赋值中使用 @{} 语法 表达式:

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

通过布局文件中的绑定组件,您可以从中移除许多界面框架调用 并使它们更易于维护。这还可以 提高应用性能,并帮助防止内存泄漏和 null 指针 异常。

使用数据绑定库

请参阅以下页面,了解如何在您的 Android 应用。

使用入门
学习如何让开发环境为使用数据做好准备 绑定库,包括对 Android Studio 中的数据绑定代码的支持。

布局和绑定表达式

表达式语言可让您编写将 变量传递给布局中的视图。数据绑定库会自动 生成将布局中的视图与您的数据绑定所需的类 对象的操作。该库提供导入、变量和 您可以在布局中使用的资源

该库的这些功能可与您的现有布局无缝共存。 例如,可以在表达式中使用的绑定变量由 位于 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>

使用可观察的数据对象
数据绑定库提供了可让您轻松观察数据的类和方法 进行更改。您不必担心在调用 底层数据源更改您可以将变量或其 可观察的属性。利用该库,您可以创建对象、字段或 可观察的集合。
生成的绑定类
数据绑定库会生成用于访问 布局的变量和视图本页介绍了如何使用和自定义 生成的绑定类。
绑定适配器
每个布局表达式都有一个绑定适配器,用于 设置相应属性或监听器所需的框架调用。对于 例如,绑定适配器可以负责调用 setText() 方法 设置文本属性,或调用 setOnClickListener() 方法来添加 点击事件监听器。最常见的绑定适配器,如 适用于本页示例中使用的 android:text 属性的适配器, 可供您在 android.databinding.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 支持库包含架构 组件,可用于 设计稳健、可测试且可维护的应用。您可以使用此架构 带有数据绑定库的组件,可进一步简化开发工作 界面设计
双向数据绑定
数据绑定库支持双向数据绑定。用于 这种类型的绑定支持接收属性的数据更改 并同时监听用户对相应媒体资源进行的更新。

其他资源

如需详细了解数据绑定,请参阅以下资源: 其他资源

示例

Codelab

博文