为什么我们在getter中将val用于LiveData而不是var

时间:2019-12-05 09:44:26

标签: android android-livedata mutablelivedata

我在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

}

1 个答案:

答案 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
}