一. Transformations.map
Function:从一个LiveData<X>
转换到另外一个LiveData<Y>
val oldLiveData = MutableLiveData<String>("hhh")
val newLiveData = Transformations.map(oldLiveData){
"NewLiveData $it"
}
- 结果
newLiveData
的value
就是"NewLiveData hhh"
oldLiveData
也可以是从repository
获取的数据
OR
需要添加依赖:implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
val oldLiveData = MutableLiveData<String>("hhh")
val newLiveData = oldLiveData.map{
"NewLiveData $it"
}
二. Transformations.switchMap
Function: 用一个LiveData<X>
的value
改变来触发另外一个LiveData<Y>
的获取
用法① 直接触发
var triggerLiveData = MutableLiveData<Boolean>()
val targetLiveData = Transformations.switchMap(triggerLiveData){
repository.getTargetLiveData()
}
OR
var triggerLiveData = MutableLiveData<Boolean>()
val targetLiveData = triggerLiveData.switchMap{
repository.getTargetLiveData()
}
- 当
triggerLiveData
的value
被改变时,就触发
repository.getTargetLiveData()
用法② 条件触发
var triggerLiveData = MutableLiveData<Boolean>()
val targetLiveData = Transformations.switchMap(triggerLiveData){
if(it){
repository.getTargetLiveDataFromKK()
}else{
repository.getTargetLiveDataFromJJ()
}
}
- 根据
triggerLiveData
的改变的value
来判断从哪个repository
读取数据
三. 讲得清楚并且更深入的blog
需要科学上网