Data Binding
库是一个support
库,使用该库,您可以使用声明性格式而非编程方式将布局中的UI组件绑定到应用程序中的数据源。
布局通常在activities中使用调用UI框架方法的代码进行定义。 例如,下面的代码调用findViewById()
来查找TextView小部件并将其绑定到viewModel变量的userName属性:
TextView textView = findViewById(R.id.sample_text);
textView.setText(viewModel.getUserName());
以下示例显示如何使用Data Binding
库直接在布局文件中将文本分配给widget。 这样就无需调用上面显示的任何Java代码。 注意在赋值表达式中使用@ {}
语法:
<TextView
android:text="@{viewmodel.userName}" />
通过在布局文件中绑定组件,您可以删除activities中的许多UI框架调用,从而使它们更易于维护。 这也可以提高应用程序的性能,并有助于防止内存泄漏和空指针异常。
注意:在许多情况下,
view binding
可以提供与data binding
相同的好处,实现起来更简单,性能更好。 如果您主要使用data binding
来替换findViewById()调用,请考虑改为使用view binding
。
使用Data binding
使用以下页面来学习如何在Android应用程序中使用Data binding库。
开始
了解如何使开发环境准备好与Data binding库配合使用,包括在Android Studio中支持Data binding代码。
布局和绑定表达式
表达式语言允许您编写将变量连接到布局中的视图的表达式。 Data binding库会自动生成将布局中的视图与数据对象绑定所需的类。 该库提供了诸如导入,变量之类的功能,并且可以在布局中使用这些功能。
库的这些功能与您现有的布局无缝共存。 例如,可以在表达式中使用的绑定变量是在data元素内定义的,该数据元素是UI布局的根元素的同级元素。 这两个元素都包装在一个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>
使用observable的数据对象
Data Binding提供了类和方法,可轻松观察数据的变化。 当基础数据源发生更改时,您不必担心刷新UI。 您可以使变量或其属性可观察。 该库使您可以观察对象,字段或集合。
生成的绑定类
Data Binding库生成绑定类,这些绑定类用于访问布局的变量和视图。 该页面显示了如何使用和定制生成的绑定类。
绑定适配器
对于每个布局表达式,都有一个绑定适配器,可以进行设置相应属性或侦听器所需的框架调用。 例如,绑定适配器可以负责调用setText()方法来设置text属性,或者调用setOnClickListener()方法来向click事件添加侦听器。 您可以在android.databinding.adapters包中使用最常见的绑定适配器,例如本页示例中使用的android:text属性的适配器。 有关常见绑定适配器的列表,请参阅适配器。 您还可以创建自定义适配器,如以下示例所示:
@BindingAdapter("app:goneUnless")
public static void goneUnless(View view, Boolean visible) {
view.visibility = visible ? View.VISIBLE : View.GONE;
}
将布局视图绑定到架构组件
Android Support
库包含体系结构组件,您可以使用它们来设计健壮,可测试和可维护的应用程序。 您可以将架构组件与Data Binding库一起使用,以进一步简化UI的开发。
两种方式的Data Binding
Data Binding库支持双向数据绑定
。 用于这种类型的绑定的表示法支持以下功能:接收属性的数据更改并同时侦听用户对该属性的更新。
翻译自:Android Develop
网友评论