[译] Android 数据绑定库 — 从可观察域到 LiveData 仅需两步

栏目: Android · 发布时间: 6年前

内容简介:数据绑定最重要的特性之一是默认情况下,普通基元和字符串是为了使对象可被观察,我们的数据绑定库中包含了一系列可被观察的类:
[译] Android 数据绑定库 — 从可观察域到 LiveData 仅需两步

数据绑定最重要的特性之一是 可观察性 。你可以用它绑定数据和 UI 元素,以便在数据更改时,相关元素在屏幕上更新。

默认情况下,普通基元和字符串是 可被观察的,因此如果在数据绑定布局中使用它们,则在创建绑定时将使用它们的值,但对它们的后续更改会被忽略。

为了使对象可被观察,我们的数据绑定库中包含了一系列可被观察的类: ObservableBooleanObservableIntObservableDouble 和范型: 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.

修改后:

<data>
        <import type="android.arch.lifecycle.LiveData" />
        <variable
            name="name"
            type="LiveData<String>" />
</data>
…
<TextView
    android:text="@{name}"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

复制代码

或者,如果你从ViewModel(首选方法)或一个 presenter 层或控制器暴露可观察对象,则无需更改布局。只需在 ViewModel 中用 LiveData 替换那些 ObservableField

修改前:

class MyViewModel : ViewModel() {
    val name = ObservableField<String>("Ada")
}

复制代码

修改后:

class MyViewModel : ViewModel() {
    private val _name = MutableLiveData<String>().apply { value = "Ada" }

    val name: LiveData<String> = _name // Expose the immutable version of the LiveData
}

复制代码

第二步:设置 LiveData 的生命周期所有者

绑定类有一个名为 setLifecycleOwner 的方法,在从数据绑定布局中观察 LiveData 时必须调用该方法。

修改前:

val binding = DataBindingUtil.setContentView<TheGeneratedBinding>(
    this,
    R.layout.activity_data_binding
)

binding.name = myLiveData // or myViewModel
复制代码

修改后:

val binding = DataBindingUtil.setContentView<TheGeneratedBinding>(
    this,
    R.layout.activity_data_binding
)

binding.lifecycleOwner = this // Use viewLifecycleOwner for fragments

binding.name = myLiveData // or myViewModel

复制代码

注意:如果要设置 fragment 的内容,建议使用 fragment.viewLifecycleOwner (而不是 fragment 的生命周期)来处理潜在的分离的 fragments。

现在你可以使用你的带有Transformations 和MediatorLiveData 的LiveData 对象。如果你不熟悉这些功能,可以参阅 “Fun with LiveData” 录像,来自 2018 Android 开发者大会

如果发现译文存在错误或其他需要改进的地方,欢迎到 掘金翻译计划 对译文进行修改并 PR,也可获得相应奖励积分。文章开头的 本文永久链接 即为本文在 GitHub 上的 MarkDown 链接。

掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为掘金 上的英文分享文章。内容覆盖 AndroidiOS前端后端区块链产品设计人工智能 等领域,想要查看更多优质译文请持续关注 掘金翻译计划 、官方微博、 知乎专栏


以上所述就是小编给大家介绍的《[译] Android 数据绑定库 — 从可观察域到 LiveData 仅需两步》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

企业IT架构转型之道:阿里巴巴中台战略思想与架构实战

企业IT架构转型之道:阿里巴巴中台战略思想与架构实战

钟华 / 机械工业出版社 / 2017-4-1 / 79

在当今整个中国社会都处于互联网转型的浪潮中,不管是政府职能单位、业务规模庞大的央企,还是面临最激烈竞争的零售行业都处于一个重要的转折点,这个转折对企业业务模式带来了冲击,当然也给企业的信息中心部门带来了挑战:如何构建IT系统架构更好地满足互联网时代下企业业务发展的需要。阿里巴巴的共享服务理念以及企业级互联网架构建设的思路,给这些企业带来了不少新的思路,这也是我最终决定写这本书的最主要原因。本书从阿......一起来看看 《企业IT架构转型之道:阿里巴巴中台战略思想与架构实战》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具