数据绑定库 属于 Android Jetpack。
数据绑定库是一种支持库,借助该库,您可以使用声明性格式(而非程序化地)将布局中的界面组件绑定到应用中的数据源。
布局通常是使用调用界面框架方法的代码在 Activity 中定义的。例如,下面的代码会调用 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}" />
借助布局文件中的绑定组件,您可以移除 Activity 中的许多界面框架调用,使其维护起来更简单、方便。还可以提高应用性能,并且有助于防止内存泄漏以及避免空指针异常。
使用数据绑定库
要了解如何在 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 支持库包含架构组件,您可以使用这些组件设计稳健、可测试且易维护的应用。您可以将架构组件与数据绑定库一起使用,以进一步简化界面开发。
- 双向数据绑定
- 数据绑定库支持双向数据绑定。此类绑定使用的表示法支持以下操作:接收对属性的数据更改,同时监听用户对此属性的更新。