- 原文地址: Android Data Binding Library — From Observable Fields to LiveData in two steps
- 原文作者: Jose Alcérreca
- 译文出自: 掘金翻译计划
- 本文永久链接: github.com/xitu/gold-m…
- 译者: Rickon
数据绑定最重要的特性之一是 可观察性 。你可以用它绑定数据和 UI 元素,以便在数据更改时,相关元素在屏幕上更新。
默认情况下 ,普通基元和字符串是 不 可被观察的,因此如果在数据绑定布局中使用它们,则在创建绑定时将使用它们的值,但对它们的后续更改会被忽略。
为了使对象可被观察,我们的
数据绑定库
中包含了一系列可被观察的类:
ObservableBoolean
、
ObservableInt
、
ObservableDouble
和范型:
ObservableField<T>
。从现在开始,我们称这些为
可观察域
。
几年后,作为第一波 架构组件 的一部分,我们发布了 LiveData ,这 又 是一个可被观察的。这是与数据绑定兼容的候选,因此我们添加了此功能。
LiveData 是可以感知生命周期的,对于可观察域而言,这并不是一个很大的优势,因为数据绑定库已经检查了视图何时处于活动状态。但是, LiveData 支持 Transformations 和很多架构组件,比如 Room 和 WorkManager 。
出于这些原因,建议你迁移到 LiveData 。你只需要两步即可完成。
第一步:使用 LiveData 代替可观察域
如果你直接在数据绑定布局中使用可观察域,只需使用
LiveData<Something>
替换
ObservableSomething
(或
ObservableField<Something>
)。
修改前:
<data>
<import type="android.databinding.ObservableField"/>
<variable
name="name"
type="ObservableField<String>" />
</data>
…
<TextView
android:text="@{name}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
复制代码
Remember that
%lt;
is not a typo. You have to escape the<
character inside XML layouts.