Устаревший подход (обратный вызов интерфейса)
Из FilterFragment внутри filterApplyButtonOnClick():
Код: Выделить всё
filterListener!!.onFilterApply()
findNavController().popBackStack()
Код: Выделить всё
override fun onFilterApply() {
filterChangedCallback?.let {
it.onFilterChange()
filterChangedCallback = null
}
}
override fun openMeetingFilter(filterChangedCallback: FilterChangedCallback) {
this.filterChangedCallback = filterChangedCallback
navController.navigate(R.id.action_meetingListFragment_to_ministryMeetingFilterFragment)
}
Код: Выделить всё
override fun onFilterChange() {
initFilter()
initIsGpsOn()
filterChanged = true
}
Код: Выделить всё
meetingListener?.openMeetingFilter(this)
- запускается немедленно
Код: Выделить всё
onFilterChange() - Состояние списка инициализируется
- Затем popBackStack() возвращается в список
Новый подход (общая ViewModel + StateFlow)
Теперь я:
- Навигация с помощью findNavController().navigate(...)
- Передача фильтра через общую ViewModel
- Наблюдение StateFlow в ListFragment
При такой настройке порядок становится следующим:
- popBackStack()
- ListFragment становится видимым
- Триггеры наблюдателя StateFlow
- initFilter() запускается
Вопрос
Как я могу воспроизвести устаревшее поведение (выполнить логику обновления до того, как фрагмент станет видимым после popBackStack()) с использованием компонента навигации + общей модели представления, не возвращаясь к интерфейсу обратные вызовы или посредничество действий?
Попытки
Я использовал SharedFlow и saveStateHandle вместо StateFlow, но в обоих случаях инициализация выполняется только после навигации.
Подробнее здесь: https://stackoverflow.com/questions/798 ... n-componen
Мобильная версия