【发布时间】:2020-02-26 12:06:14
【问题描述】:
我的LiveData 不工作。
ViewModel:
private var _email = MutableLiveData<String>()
fun setEmail(){
_email.postValue("azizjon@bla.mn")
}
fun getEmail(): LiveData<String>{
return _email
}
Fragment的onViewCreated方法
:
mViewModel.getEmail().observe(viewLifecycleOwner, Observer {
tvEmail.text = it
})
mViewModel.setEmail() //Trying to post data to my LiveData.
上面的代码不起作用,因为tvEmail 没有改变。
但是,如果我相信一个按钮可以像这样将数据发布到 LiveData,它就可以工作:
//Inside fragment again
button.setOnClickListener {
mViewModel.setEmail()
}
当用户点击按钮时,tvEmail 中的文本会发生变化。如果用户不点击,什么都不会发生。我在这里错过了什么?
编辑:
我刚刚用Activity 测试了代码。令人惊讶的是,对于Activitys,它可以正常工作,但对于Fragments 无效。
【问题讨论】:
-
你在哪里放置 mViewModel.setEmail() 在应用程序中。这段代码是写在 oncreate() 函数里面的吗?
-
@DivakarMurugesh 在
Fragment的onViewCreated方法里面 -
你在哪里初始化视图模型变量?
-
@DivakarMurugesh 在父
Fragment类'onViewCreated方法中。
标签: android android-livedata android-viewmodel