我在Google上看到了此代码,对此有疑问。 在此示例中,他们将val用于viewState并使用getter,因此,如果我使用val,我可以更改LiveData中的任何内容,因此使用为将项目更改为其中而创建的可变实时数据,但在postValue后app无法运行bcs的过程中,我无法再次使用吸气剂BCS是val ....
我的意思是:
1)获取viewState(确定)
2)_viewState.postvalue()(确定)
3)带有更改的getviewState(不正确,请接受更改)
所以他们使用val还不错吗???
class MainViewModel : ViewModel() {
private var _viewState: MutableLiveData<MainViewState> = MutableLiveData()
val viewState: LiveData<MainViewState>
get() = _viewState
}
答案 0 :(得分:1)
viewState应该为val 并且如果已经观察到viewState,则不需要getViewState再次更新视图。
因此,如果您需要更新viewState,只需更新_viewState
示例:
viewModel
private var _viewState: MutableLiveData<MainViewState> = MutableLiveData()
val viewState: LiveData<MainViewState>
get() = _viewState
fun updateViewState(state:MainViewState){
_viewState.value = state
}
在您的Activity OnCreate上,或者如果在Fragment OnCreateView上,您只需要观察viewState
viewModel.viewState.observe(this,Observer{viewState->
// Do your UI things
}