Data Binding 系列(一)概览

简介

Data Binding 是一个支持库,它使用一种 声明的方式 代替 编码的方式,用来绑定 UI 控件和数据源。android

一般咱们会在 activity 里面调用 UI 框架层的方法声明 view。例如,下面的代码调用了 findViewById() 声明了一个 TextView 控件,而且把它和 viewModeluserName 属性进行了绑定:express

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

下面的代码展现了如何使用 Data Binding 在布局里面直接给 TextViewtest 属性进行赋值。这么作的好处是没必要再像上面的例子同样调用 Java 代码。注意在赋值表达式中使用的语法是 @{}架构

<TextView
    android:text="@{viewmodel.userName}" />
复制代码

在布局里面直接绑定 UI 控件,能够减小在 activity 中 UI 框架方法的调用,这使得代码更加简洁、更容易维护。它还能够提高 App 的性能,避免内存泄漏和空指针异常。app

使用

会分下面几个部分来展开介绍 Data Binding框架

1 环境准备

介绍了如何准备 Data Binding 的开发环境。less

2 布局和绑定表达式(binding expression

绑定表达式的使用创建了 view 和变量之间的联系。Data Binding 会自动生成一些类用于绑定 view 和 数据。它提供了诸如 importsvariablesincludes 等在布局中能够直接使用的特性。布局

这些特性能够和现有的布局很好地共存。好比,能够在绑定表达式中直接使用的变量是定义在 data 元素标签中的,data 元素标签是和布局的根元素标签同级的。它们都是 layout 标签的子元素,以下所示:post

<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>
复制代码

3 可观察的数据(observable data

Data Binding 提供了一些类和方法使得观察数据的变化变得很简单。你大可没必要担忧数据变化时刷新 UI 的问题。它提供了使对象、字段、集合变得可观察的方法。性能

4 生成绑定类(binding class

Data Binding 自动生成了一些类用来访问布局变量和 view。这一章会向你展现如何使用和自定义这些生成的绑定类。编码

5 绑定适配器(binding adapter

对于每个绑定表达式,都会有相应的绑定适配器调用框架的方法去设置对应的属性或者监听器。好比,绑定适配器会调用 setText() 方法去设置 text 属性,或者调用 setOnClickListener() 方法去设置监听器。经常使用的一些绑定适配器,好比示例中用于 android:text 属性的绑定适配器,定义在 android.databinding.adapters 包中。你也能够自定义适配器,以下所示:

@BindingAdapter("app:goneUnless")
fun goneUnless(view: View, visible: Boolean) {
    view.visibility = if (visible) View.VISIBLE else View.GONE
}
复制代码

6 绑定 view 和其余架构组件

使用 Data binding 还能够将 view 和其余架构组件绑定,从而简化 UI 的开发。

7 双向数据绑定(two-way data binding

Data binding 支持双向数据绑定。既能够数据变化刷新 view,也能够 view 刷新更新数据。

相关文章
相关标签/搜索