LiveData не переиздается при возобновлении фрагмента

#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. Спасибо. Я пытался избежать вызова функции. Но если выбора нет…