当我改变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()
}
}
}
}
2条答案
按热度按时间axkjgtzd1#
解决了,我只是将
Fragment
中的ViewModel
声明更改为以下内容,现在它工作正常:yrefmtwq2#
在您的Fragment类中,您有
改为执行此操作
例如,将***myValue.观察者内部***替换为***myValue.观察者***。