两步使用|两步使用 LiveData 替换 Observable Field
文章图片
可观察性指的是一个对象会在其数据发生变更时向其他类发出通知。可观察性是数据绑定库 (Data Binding) 的重要特性之一,它可以将数据和 UI 元素绑定在一起——当数据发生变化时,屏幕上的相关元素也会随之更新。
默认情况下,普通函数和字符串是不可观察的,这就意味着,当您在数据绑定布局中需要使用它们时,只能在新建的时候获取它们的值,但在后续的操作中,却不能得到相应的数据。
为了使对象可观察,数据绑定库中包含了一系列可观察的类,如: ObservableBoolean、ObservableInt、ObservableDouble… 和一些通用类、ObservableField
再后来,在我们发布 Android 架构组件时首批就包含了 LiveData,这是另一个 “可观察” 类,并且与数据绑定库兼容。
LiveData 可以感知生命周期,这一点与 Observable Fields 相比并没有多大优势,因为 Data Binding 原本就可以检查视图活跃情况。因此对于 LiveData来说,它的优势在于不仅支持 Transformations,而且可以与许多架构组件 (如 Room、WorkManager) 相互配合使用。
https://developer.android.google.cn/topic/libraries/data-binding/
https://developer.android.google.cn/topic/libraries/architecture
https://developer.android.google.cn/topic/libraries/architecture/livedata
https://developer.android.google.cn/reference/android/arch/lifecycle/Transformations
https://developer.android.google.cn/topic/libraries/architecture/room
https://developer.android.google.cn/reference/androidx/work/WorkManager
综上,我们推荐您使用 LiveData。方法也非常简单,只需要两个步骤。
第一步: 用 LiveData 替换 Observable Fields
如果您是直接在数据绑定中使用 Observable Fields,只需将 Live ObservableSomething (或ObservableField ) 替换为 LiveData即可。
替换前:
注意: “<
” 不是错误,而是您必须对此处的 “<” 符号进行转义。
替换后:
或者,如果您是通过 ViewModel、Presenter 或 Controller 暴露可观察对象的话,则无需更改布局,只要用 ViewModel 中的 LiveData 替换这些 ObservableFields 即可。
https://developer.android.google.cn/topic/libraries/architecture/viewmodel
替换前:
class MyViewModel : ViewModel() {
val name = ObservableField("Ada")
}
替换后:
class MyViewModel : ViewModel() {
private val _name = MutableLiveData().apply { value = "https://www.it610.com/article/Ada" }val name: LiveData = https://www.it610.com/article/_name // Expose the immutable version of the LiveData
}
第二步: 设置 LiveData 的生命周期所有者
视图的绑定类中包含一个 setLifecycleOwner 方法,想要从数据绑定布局观察 LiveData ,必须使用该方法。
替换前:
val binding = DataBindingUtil.setContentView
替换后:
val binding = DataBindingUtil.setContentView
小提示: 如果要设置 fragment 的内容,建议使用 fragment.viewLifecycleOwner(而不是 fragment 的生命周期) 来处理潜在的分离 fragment。
现在,LiveData 对象可以与 Transformations 或 MediatorLiveData 配合使用,完成数据转换。
我们也在 2019 年的 Android Dev Summit 上发布了一个与 LiveData 相关的视频,如下:
https://developer.android.google.cn/topic/libraries/architecture/livedata
https://developer.android.google.cn/reference/android/arch/lifecycle/Transformations
https://developer.android.google.cn/reference/android/arch/lifecycle/MediatorLiveData
https://v.qq.com/x/page/a30225h40dj.html
https://www.bilibili.com/video/BV1PJ411m7ke/
文章图片
点击屏末 | 阅读原文 | 了解更多 LiveData 使用指南
文章图片
文章图片
想了解更多 Android 内容?
推荐阅读
文章图片
文章图片
文章图片
【两步使用|两步使用 LiveData 替换 Observable Field】
推荐阅读
- 由浅入深理解AOP
- 【译】20个更有效地使用谷歌搜索的技巧
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- iOS中的Block
- Linux下面如何查看tomcat已经使用多少线程
- 使用composer自动加载类文件
- android|android studio中ndk的使用
- 使用协程爬取网页,计算网页数据大小