Этот ответ показывает нам, как мы можем использовать 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
Например)
ViewModel
developer.android.com/reference/androidx/lifecycle/ иstateHandle.set
звонит мнеmutableLiveData.setValue(value);
, и это нормально. Я не хочу знать, с кем объединить это сliveData{}
или нет ли в этом пользы при использованииSavedStateHandle
- person GuilhE   schedule 24.09.2019