我正在使用MVVM,LiveData并尝试实施存储库模式。
但是,在我的存储库类中调用方法-返回RegisterRepo
的LiveData
不起作用。我不知道为什么。任何建议将不胜感激。
为了简洁起见,删除了样板代码。
Activity
的onCreateMethod
mViewModel.status.observe(this, Observer {
when (it) {
true -> {
Log.d("----------", " true ") //These message is never being printed.
}
false -> {
Log.d("----------", "false ") //These message is never being printed.
}
}
})
button.setOnClickListener {
mViewModel.a()
}
ViewModel
class AuthViewModel (val repo: RegisterRepo): ParentViewModel() {
//...
var status = MutableLiveData<Boolean>()
fun a() {
status = repo.a()
}
}
RegisterRepo
class RegisterRepo () {
fun a(): MutableLiveData<Boolean> {
var result = MutableLiveData<Boolean>()
result.value = true
return result
}
}
但是,如果我将ViewModel
中的代码更改为此,一切正常。
ViewModel
class AuthViewModel (val repo: RegisterRepo): ParentViewModel() {
//...
var status = MutableLiveData<Boolean>()
fun a() {
status.value = true //Change here causing everything work as expected.
}
}
在第一个ViewModel代码中,调用方法a
时,将另一个LiveData
分配给status
变量,该实时数据与Activity
观察到的数据不同,因此该值不会通知您的Activity
第二种方法正确使用,并且第一种方法不起作用,因为您正在RegisterRepo中创建新的MutableLive数据,因此,基本上,在您创建可观察到的“状态”时,您将在其中分配一个值进入它是不同的。所以第二个是唯一的方法