Этот ответ показывает нам, как мы можем использовать liveData
в хранилище, чтобы возвратить LiveData
в ViewModel
, который будет наблюдать View
.
Теперь, что если мы хотимиспользовать SavedStateHandle
?Как мы можем преобразовать следующий код для использования liveData{}
из LiveData-Ktx ?
ViewModel:
private val _itemLiveData = stateHandle.getLiveData<MyItem>(KEY, MyItem())
val itemLiveData: LiveData<MyItem> = _itemLiveData
suspend fun nextPage() {
viewModelScope.launch {
val item = repoCall...
stateHandle.set(KEY, item)
}
}
Активность:
viewModel.itemLiveData.observe(this, Observer {
lifecycleScope.launch {/*...update ui...*/}
})
Получим ли мы выгоду от использования liveData{... emit()}
?
Я вижу 3 преимущества от использования SavedStateHandle
:
1 - Восстановите ваше состояние viewModel
2 - Он вызывает .value()
для нас, когда мыиспользование stateHandle.set()
3 - stateHandle.getLiveData
помогает нам инициализировать значение (это также полезно, например, для Data Binding
)