我在我的项目中构建了一个 viewModel,并且编写了一个像这样的 LiveData 集
private val _user = MutableLiveData<User>()
val user= _user
val id = _user.map {
if ( something ) {
value
} else {
null
}
}
我面临的问题是,当我在 Fragment/Activity 中观察“id”时,我可以接收来自“id”LiveData 的更新,但是如果我尝试通过“id.value”从“id”获取当前值,它会返回 null即使“_user”liveData 已更新。
这有什么理由吗?我错过了什么吗?
我遇到了和你一样的问题,通过下面的代码解决了。
fun <T> LiveData<T>.safeGetValue(): T? {
// because MediatorLiveData only setValue when source changed and
// has active observers, so if not, we add an empty observer to
// trigger it's setValue
return if (this is MediatorLiveData && !hasActiveObservers()) {
val emptyObserver = Observer<T> { }
observeForever(emptyObserver)
value.also { removeObserver(emptyObserver) }
} else {
value
}
}