LiveData

LiveData 是一个可被观察的数据持有类,他是官方MVVM架构中的一个核心类,作为一个被观察者,不仅可以被订阅还具有生命周期的感知能力,只有在处理active状态下才会被收到更新。
LiveData是一个抽象类,所有我们在使用时都是用的它的子类,我们来看一下官方为我们提供了实现类MutableLiveDataMediatorLiveData
MutableLiveData MutableLiveData 是 LiveData 的一个最简单实现,它可以接收数据更新并通知观察者。

val liveDataA = MutableLiveData() liveDataA.value = https://www.it610.com/article/someValue liveDataA.postValue(value)

Transformations#map()
使用 Transformations#map() 方法可以将数据从一个 LiveData 传递到另一个 LiveData
val transformedLiveData = https://www.it610.com/article/Transformations.map(liveDataA ) {"the a value is:$it" }

当liveDataA的值发生变化时,相对应的transformedLiveData 的值也会相应的得到更新
Transformations#switchMap
switchMap可以通过一个LiveData的值,在几个LiveData的数据之间切换
val liveDataA = MutableLiveData().also { it.value=https://www.it610.com/article/1 }; val liveDataB = MutableLiveData().also { it.value="https://www.it610.com/article/bb" } val liveDataC = MutableLiveData().also { it.value="https://www.it610.com/article/cc" } val liveDataD = MutableLiveData().also { it.value="https://www.it610.com/article/dd" }val liveData = https://www.it610.com/article/Transformations.switchMap(liveDataA){ when(it){ 1->liveDataB 2->liveDataC else-> liveDataD } }

如上根据liveDataA的值,会在数据源的liveDataB,liveDataC,liveDataD中选择一个返回
MediatorLiveData 【LiveData】MediatorLiveData可以把多个LiveData集合起来
val liveDataB = MutableLiveData().also { it.value="https://www.it610.com/article/bb" } val liveDataC = MutableLiveData().also { it.value="https://www.it610.com/article/cc" } val mediatorLiveData = https://www.it610.com/article/MediatorLiveData() mediatorLiveData.addSource(liveDataB){ it-> "it is $it" } mediatorLiveData.addSource(liveDataC){ it-> "it is $it" }

如上,liveDataB 与 liveDataC中任意一个发生数据更新,都会使 mediatorLiveData 发生更新
本文参考LiveData的数据转换 Transformations使用
自定义LiveData可以参考Android livedata原理解析之自己实现一个简单的LiveData

    推荐阅读