为什么我们在 getter 中对 LiveData 使用 val 而不是 var
why we use val for LiveData in getter instead of var
我在 google 上看到了这段代码,我对此有疑问。
在此示例中,他们将 val 用于 viewState 并使用 getter 因此,如果我使用 val,我可以更改 LiveData 中的任何内容,因此使用为将项目更改为其中而创建的可变实时数据,但在 postValue 之后应用程序无法正常工作 bcs我不能再使用 getter bcs 它是 val....
我的意思是:
1) 获取视图状态(确定)
2) _viewState.postvalue() (确定)
3) 更改后的 getviewState(不正确 BCS 它的 VAL 和 DOESN;T 接受更改)
他们用val是不是不好???
class MainViewModel : ViewModel() {
private var _viewState: MutableLiveData<MainViewState> = MutableLiveData()
val viewState: LiveData<MainViewState>
get() = _viewState
}
viewState 应该是 val
如果已经观察到 viewState,则不需要 getViewState 再次更新视图。
因此,如果您需要更新 viewState,只需更新 _viewState
示例:
视图模型
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
}
我在 google 上看到了这段代码,我对此有疑问。 在此示例中,他们将 val 用于 viewState 并使用 getter 因此,如果我使用 val,我可以更改 LiveData 中的任何内容,因此使用为将项目更改为其中而创建的可变实时数据,但在 postValue 之后应用程序无法正常工作 bcs我不能再使用 getter bcs 它是 val....
我的意思是:
1) 获取视图状态(确定)
2) _viewState.postvalue() (确定)
3) 更改后的 getviewState(不正确 BCS 它的 VAL 和 DOESN;T 接受更改)
他们用val是不是不好???
class MainViewModel : ViewModel() {
private var _viewState: MutableLiveData<MainViewState> = MutableLiveData()
val viewState: LiveData<MainViewState>
get() = _viewState
}
viewState 应该是 val 如果已经观察到 viewState,则不需要 getViewState 再次更新视图。
因此,如果您需要更新 viewState,只需更新 _viewState
示例:
视图模型
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
}