绪
Data Binding 库是一个可以让开发者使用一个声明性格式,而不是编码,把 UI 控件绑定到数据源上。
What And How.png译者注:这里提到的 声明式可以当做使用 DataBinding 的理由;此外,对于声明式编程和命令式编程推荐阅读 这篇文章,尽管它是写于 2010 ,而且是以 .Net 为背景讲述,但是个人认为属于经得起时间考验的好文,下面的图片 What And How 转载于该文。
定义布局通常是在 Activity 中,使用编码调用 UI 框架的方法。例如,下面的代码调用 findViewById() 获取一个 TextView 控件,然后把它绑定到 ViewModel 变量的 userName 属性上:
TextView textView = findViewById(R.id.sample_text);
textView.setText(viewModel.getUserName());
下面的例子展示了如何使用 Data Binding 库,直接在布局文件中指定文本到控件上。它并不需要调用任何上面描述的 Java 代码。注意下面赋值表达式中,使用了 @{ } 语法:
<TextView
android:text="@{viewmodel.userName}" />
在布局文件中绑定组件,可以让你在 Activity 中去除更多的 UI 框架调用,使代码更精简且易于维护。这样还可以提升你的应用性能,同时有助于避免内存泄漏和空指针异常。
下面的文章页可以学习如何在 Android 应用中使用 Data Binding Library 。在 Android Data Binding Library samples,可以查阅到示例代码。
目录
起航
本章节学习如何准备好你的开发环境用于 Data Binding 库,以及如何在 Android Studio 中使用 Data Binding 编码。
Data Binding 库是一个 Android Jetpack 架构的组件。在 Sunflower 示例 App 中就运用到了它。
布局和绑定表达式
表达式语言能让你在布局文件中,编写出连接变量到视图的表达式。Data Binding 库自动生成类必须使用你的数据层对象绑定在 layout 文件中的视图。这个库提供了类似导入类、声明变量、includes 的特性,你可以在布局文件使用。
这些特性与你现有的布局是无缝共存的。例如,绑定的变量可以用于定义成一个和 UI 根布局平级的 data 标签内的表达式。根布局和 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>
使用观察者数据对象
Data Binding 库提供了类和方法可以很容易的观察数据变更。你不用担心当潜在的数据源变更时刷新 UI 。你可以创建你的变量或者它们的可观察属性。这个库允许你创建对象、属性或者集合的可观察者。
生成绑定类
Data Binding 库生成的绑定类用于访问布局的变量和视图。在这一章节向你展示,如何使用它自定义生成绑定类。
绑定适配器
对每一个 layout 表达式,都存在一个绑定适配器,使这套框架调用被要求的设置相应属性或者监听。例如,绑定适配器可以处理调用 setText() 方法来设置文本属性或者调用 setOnClickListener() 方法来添加一个点击事件监听者。最常见的绑定适配器,就是在这章节使用到的 android:text 属性适配器,在 android.databinding.adapters 包中可以供你使用。参见 这里 ,可以获取如下图所示的一份常用绑定适配器的清单。
android_databinding_adapters.png当然,你也可以自定义适配器,如下所示:
@BindingAdapter("app:goneUnless")
public static void goneUnless(View view, Boolean visible) {
view.visibility = visible ? View.VISIBLE : View.GONE;
}
绑定布局视图作用于 Architecture 组件
这个 Android 支持库包含于 架构组件 ,它常常用于设计健壮的、可测试的、可维护的 App。你可以使用 Data Binding 库更简化你的 UI 开发。
网友评论