【发布时间】:2020-03-24 00:03:23
【问题描述】:
从活动中调用它是一个好习惯吗:
viewModel.somedata = "some value"
知道 Activity 已经在观察 viewModel 并且 somedata 是 livedata
【问题讨论】:
标签: android kotlin mvvm android-livedata
从活动中调用它是一个好习惯吗:
viewModel.somedata = "some value"
知道 Activity 已经在观察 viewModel 并且 somedata 是 livedata
【问题讨论】:
标签: android kotlin mvvm android-livedata
为了遵守 MVVM 指南,最好由 ViewModel 处理。模型更新后视图也会更新。
Kotlin 中的示例:
有了这个示例模型,以及更新值的扩展函数:
data class MyModel(
val somedata: String,
val otherdata: String
)
fun MyModel.toStateWithNewSomedata(newSomedata: String): MyModel =
this.copy(
somedata = newSomedata
)
ViewModel 中的这个 LiveData 定义:
var myLiveData = MutableLiveData<MyModel>()
然后你在 ViewModel 中定义了这个方法,你可以从视图中调用它来更新值:
fun updateSomedata(newVal: String) {
myLiveData.value?.let { model ->
val updatedModel = model.toStateWithNewSomedata(newVal)
myLiveData.postValue(updatedModel)
}
}
那么你仍然可以在视图中正常观察:
viewModel.myLiveData.observe(this, Observer { updatedModel ->
//update view with updated model
val newSomedata = updatedModel.somedata
})
如果你调用updateSomedata()方法,它会更新模型,这会更新视图。
【讨论】: