Чтобы придерживаться рекомендаций MVVM, лучше для ViewModel позаботиться об этом. Представление будет обновлено после обновления модели.
Пример в Kotlin:
С этим примером модели и функцией расширения для обновления значения:
data class MyModel(
val somedata: String,
val otherdata: String
)
fun MyModel.toStateWithNewSomedata(newSomedata: String): MyModel =
this.copy(
somedata = newSomedata
)
И это определение LiveData в ViewModel:
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()
, он обновит модель, которая обновит представление.