• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

两步使用-LiveData-替换-Observable-Field

android 搞代码 3年前 (2022-03-02) 39次浏览 已收录 0个评论

可察看性指的是一个对象会在其数据产生变更时向其余类发出通知。可察看性 是数据绑定库 (Data Binding) 的重要个性之一,它能够将数据和 UI 元素绑定在一起——当数据发生变化时,屏幕上的相干元素也会随之更新。

默认状况 下,一般函数和字符串是不可察看的,这就意味着,当您在数据绑定布局中须要应用它们时,只能在新建的时候获取它们的值,但在后续的操作中,却不能失去相应的数据。

为了使对象可察看,数据绑定库 中蕴含了一系列可察看的类,如: ObservableBoolean、ObservableInt、ObservableDouble… 和一些通用类、ObservableField<T>。这里咱们将其统称为 “Observable Fields”。

再起初,在咱们公布 Android 架构组件 时首批就蕴含了 LiveData ,这是另一个 “可察看” 类,并且与数据绑定库兼容。

LiveData 能够感知生命周期,这一点与 Observable Fields 相比并没有多大劣势,因为 Data Binding 本来就能够查看视图沉闷状况。因而对于 LiveData 来说,它的劣势在于不仅反对 Transformations,而且能够与许多架构组件 (如 Room、WorkManager) 相互配合应用。

综上,咱们举荐您应用 LiveData 。办法也非常简单,只须要两个步骤。

第一步: 用 LiveData 替换 Observable Fields

如果您是间接在数据绑定中应用 Observable Fields,只需将 Live ObservableSomething (或ObservableField <Something>) 替换为 LiveData <Something> 即可。

替换前:

<code class="XML"><data>
    <import type="android.databinding.ObservableField"/>
    <variable 
        name="name" 
        type="ObservableField&lt;String>" />
</data>
…
<TextView
    android:text="@{name}"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

留神: “<” 不是谬误,而是您必须对此处的 “<” 符号进行本义。

替换后:

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

或者,如果您是通过 ViewModel、Presenter 或 Controller 裸露可察看对象的话,则无需更改布局,只有用 ViewModel 中的 LiveData 替换这些 ObservableFields 即可。

替换前:

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

替换后:

<code class="Kotlin">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 ,必须应用该办法。

替换前:

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

binding.name = myLiveData // or myViewModel

替换后:

<code class="Kotlin">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 的生命周期) 来解决潜在的拆散 fragment。

当初,LiveData 对象能够与 Transformations 或 MediatorLiveData 配合应用,实现数据转换。

咱们也在 2019 年的 Android Dev Summit 上公布了一个与 LiveData 相干的视频,能够查看这个视频获取 LiveData 相干的更多信息。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:两步使用-LiveData-替换-Observable-Field

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址