#android #android-lifecycle #android-livedata #kotlin-coroutines #android-viewmodel
#Android #android-жизненный цикл #android-livedata #kotlin-сопрограммы #android-viewmodel
Вопрос:
В моем фрагменте у меня есть этот код:
fun onViewCreated(view: View, savedInstanceState: Bundle?) {
//...
viewModel.state.observe(viewLifecycleOwner) {
//do something
}
}
И в моей ViewModel:
class MyViewModel: ViewModel() {
val state = liveData {
val state = dataSource.getState()
emit(state)
}
}
Когда я перехожу к другому фрагменту или действию и нажимаю кнопку «Назад», вызываются фрагменты onCreateView
и onViewCreated
методы, но viewModel.state
имеют то же значение. Я имею в виду, dataSource.getState()
не вызывается снова. Мне нужно, чтобы состояние было повторно извлечено из источника данных.
Возможно ли это с помощью liveData
builder? Если нет, то как мне это сделать?
Комментарии:
1. попробуйте поместить viewModel.state.observe…at onResume, и удалить наблюдателя при onPause
Ответ №1:
Вам нужно просто вызывать функцию загрузки каждый раз, когда это необходимо. Один из возможных способов сделать это
ViewModel :
val stateLiveData = MutableLiveData<>()
fun loadData() {
viewModelScope.launch {
val state = dataSource.getState()
stateLiveData.setValue(state)
}
}
Фрагмент :
fun onViewCreated(view: View, savedInstanceState: Bundle?) {
//...
viewModel.loadData()
viewModel.stateLiveData.observe(viewLifecycleOwner) {
//do something
}
}
Комментарии:
1. Спасибо. Я пытался избежать вызова функции. Но если выбора нет…