从活动中调用它是一种好习惯:
viewModel.somedata = "some value"
知道活动已经在观察viewModel并且somedata是实时数据
为了遵守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()
方法,它将更新模型,这将更新视图。