我在我的应用程序中使用 MVVM 作为架构,但我在观察者代码中看到了一个意想不到的场景:在观察者内部总是在获得实际值之前进入一次。
myViewModel.getUserInfo().observe(this, androidx.lifecycle.Observer { user ->
if (user!= null) {
} else {
//THE FIRST TIME THROW HERE
}
在我的 viewModel 中,我有这个:
class MyViewModel : ViewModel() {
fun getUserInfo(): MutableLiveData<UserInfoResponse> {
val liveData: MutableLiveData<UserInfoResponse> = MutableLiveData()
liveData.postValue(UserInfoResponse("user"))
return liveData
}
有人能想到正在发生的事情吗? 谢谢
答案 0 :(得分:0)
将任务发布到主线程以设置给定值。因此,如果您在主线程中执行了以下代码:
liveData.postValue("a");
liveData.setValue("b");
<块引用>
首先设置值“b”,然后主线程将用值“a”覆盖它。 如果在主线程执行已发布的任务之前多次调用此方法,则只会调度最后一个值。
猜测,您在返回 LiveData
之前发布了该值,但它实际上是 set after观察者已被添加并收到第一个值。当这种情况发生时,观察者将再次使用第二个发布的值被调用。
您已经提到添加和删除片段,并且我假设它们使用相同的 ViewModel
,因此当他们开始观察 LiveData
时,它已经具有之前设置的值,并且观察者立即收到。 post
ed 值稍后出现。