[英]LiveData observer is not being called when changing value
當我更改LiveData
值時,不會調用我的觀察者。 我有一個ViewModel
,一個自定義View
和一個Fragment
。 在ViewModel
中我設置LiveData
,在自定義View
中我更改此LiveData
的值,在Fragment
中我觀察LiveData
。
使用斷點,我看到我的自定義View
工作正常並正確更改LiveData
值,但在Fragment
中,僅在創建Fragment
時調用觀察者。
視圖模型:
class MyViewModel : ViewModel {
private val _myValue : MutableLiveData<Boolean> by lazy{
MutableLiveData<Boolean>().apply{
value = false
}
}
val myValue : LiveData<Boolean> get() = _myValue
fun setMyValue(checked: Boolean){
_myValue.postValue(checked)
}
}
自定義視圖:
class MyCustomView @JvmOverloads constructor(ctx:Context,attrs:AttributeSet? = null): ConstraintLayout(ctx,attrs){
private val viewmodel by lazy{
ViewModelProvider(ViewTreeViewModelStoreOwner.get(this)!!).get<MyViewModel>()
}
init{
setValue()
}
fun setValue(){
if(something == true){
viewmodel.setMyValue(true)
}else{
viewmodel.setMyValue(false)}
}
}
}
分段:
class Fragment :Fragment(){
private val viewModel : MyViewModel by activityViewModels()
override fun onViewCreated(view:View,savedInstanceState: Bundle?){
super.onViewCreated(view,savedInstanceState)
setUpObserver()
}
private fun setUpObserver(){
viewModel.apply{
myValue.observerInside{ myvalue->
if(myValue)
someFunction()
else
anotherFunction()
}
}
}
}
解決了,我剛剛將Fragment
中的ViewModel
聲明更改為這個,現在它工作正常:
private val viewmodel by lazy{
ViewModelProvider(ViewTreeViewModelStoreOwner.get(binding.root)!!).get<MyViewModel>()
}
在你的 Fragment 類中,你有
private fun setUpObserver(){
viewModel.apply{
myValue.observerInside{ myvalue->
if(myValue)
someFunction()
else
anotherFunction()
}
}
改為這樣做
private fun setUpObserver(){
viewModel.apply {
myValue.observer { myvalue ->
...
}
}
}
如中所示,將myValue.observerInside替換為myValue.observe 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.