数据绑定库 Android Jetpack 的一部分。
数据绑定库是一种支持库,借助该库,您可以使用声明性格式(而非程序化方式)将布局中的界面组件绑定到应用中的数据源。
布局通常在 activity 中使用调用界面框架方法的代码进行定义。例如,以下代码会调用 findViewById() 来查找 TextView widget,并将其绑定到 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());
以下示例展示了如何使用数据绑定库直接在布局文件中为 widget 分配文本。这样就无需调用上面显示的任何 Java 代码。请注意赋值表达式中 @{} 语法的使用:
<TextView
android:text="@{viewmodel.userName}" />
通过在布局文件中绑定组件,您可以移除 activity 中的许多界面框架调用,从而使 activity 更简单、更易于维护。这还可以提升应用的性能,并有助于防止内存泄漏和 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 支持库包含架构组件,您可以使用这些组件来设计可靠、可测试且可维护的应用。您可以将架构组件与数据绑定库结合使用,进一步简化界面的开发。
- 双向数据绑定
- 数据绑定库支持双向数据绑定。用于此类绑定的表示法支持接收对属性的数据更改,同时监听用户对该属性的更新。
其他资源
如需详细了解数据绑定,请参阅下面列出的其他资源。