我正在使用MVVM,LiveData并尝试实现存储库模式。
但是,在我的存储库类-RegisterRepo
中调用返回LiveData
的方法是行不通的。我不知道为什么。任何建议将不胜感激。
删除样板代码以简化代码。
Activity
的{{1}}
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
答案 0 :(得分:2)
在第一个ViewModel代码中,调用方法a
时,您将另一个LiveData
分配给status
变量,此实时数据与{{1} },以便该值不会通知您的Activity
答案 1 :(得分:1)
第二种方法正确使用,并且第一种方法不起作用,因为您正在RegisterRepo中创建新的MutableLive数据,因此基本上,在您创建可观察到的“状态”时,将分配给价值转化为不同。所以第二种是唯一的方法