LiveData:Transformations.map & Transformations.switchMap 用法

一. Transformations.map

Function:从一个LiveData<X>转换到另外一个LiveData<Y>

val oldLiveData = MutableLiveData<String>("hhh")
val newLiveData = Transformations.map(oldLiveData){
    
     
		"NewLiveData $it"
}
  • 结果newLiveDatavalue就是"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()
}
  • triggerLiveDatavalue被改变时,就触发
 repository.getTargetLiveData()

用法② 条件触发

var triggerLiveData = MutableLiveData<Boolean>()
val targetLiveData = Transformations.switchMap(triggerLiveData){
    
    
	if(it){
    
    
		repository.getTargetLiveDataFromKK()
	}else{
    
    
		repository.getTargetLiveDataFromJJ()
	}
}
  • 根据triggerLiveData的改变的value来判断从哪个repository读取数据

三. 讲得清楚并且更深入的blog

需要科学上网

Understanding LiveData made simple

猜你喜欢

转载自blog.csdn.net/qq_43709922/article/details/104283071