LiveData
LiveData 是一个可被观察的数据持有类,他是官方MVVM架构中的一个核心类,作为一个被观察者,不仅可以被订阅还具有生命周期的感知能力,只有在处理active状态下才会被收到更新。
LiveData是一个抽象类,所有我们在使用时都是用的它的子类,我们来看一下官方为我们提供了实现类MutableLiveData
和MediatorLiveData
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
推荐阅读
- 热闹中的孤独
- 我要做大厨
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 爱就是希望你好好活着
- 太平之莲
- 知识
- 叙述作文
- 时间老了
- 清明,是追思、是传承、是感恩。
- 我错了,余生不再打扰