Android 如何观察2个MutableLiveData中的值何时返回?
我有两个可变的LiveData。只有当从两个MutableLiveData返回值时,我才需要执行任务。 对于2LiveData,我们可以使用MediatorLiveData执行同样的操作。在我的例子中,我使用的是MutableLiveData,它需要LiveData而不是MutableLiveDataAndroid 如何观察2个MutableLiveData中的值何时返回?,android,android-livedata,Android,Android Livedata,我有两个可变的LiveData。只有当从两个MutableLiveData返回值时,我才需要执行任务。 对于2LiveData,我们可以使用MediatorLiveData执行同样的操作。在我的例子中,我使用的是MutableLiveData,它需要LiveData而不是MutableLiveData 现在,我如何仅在两个MutableLiveData的值都返回时执行任务?您仍然可以使用MediatorLiveData,因为MutableLiveData扩展自LiveData。请查看此链接以获取
现在,我如何仅在两个MutableLiveData的值都返回时执行任务?您仍然可以使用
MediatorLiveData
,因为MutableLiveData
扩展自LiveData
。请查看此链接以获取Marek Kondracki的答案:
val profile=MutableLiveData()
val user=MutableLiveData()
val title=profile.combineWith(user){profile,user->
“${profile.job}${user.name}”
}
有趣的LiveData.combineWith(
liveData:liveData,
块:(T?,K?)->R
):LiveData{
val result=MediatorLiveData()
result.addSource(此){
result.value=block.invoke(this.value,liveData.value)
}
result.addSource(liveData){
result.value=block.invoke(this.value,liveData.value)
}
返回结果
}
val profile = MutableLiveData<ProfileData>()
val user = MutableLiveData<CurrentUser>()
val title = profile.combineWith(user) { profile, user ->
"${profile.job} ${user.name}"
}
fun <T, K, R> LiveData<T>.combineWith(
liveData: LiveData<K>,
block: (T?, K?) -> R
): LiveData<R> {
val result = MediatorLiveData<R>()
result.addSource(this) {
result.value = block.invoke(this.value, liveData.value)
}
result.addSource(liveData) {
result.value = block.invoke(this.value, liveData.value)
}
return result
}