Я борюсь с очень странным поведением навигационной библиотеки android.
Я создал фрагмент с этими обратными вызовами (для отображения полноэкранного содержимого фактическое переключение пользовательского интерфейса системы реализовано в * 1003). *):
class FullscreenFragment : Fragment() {
...
override fun onResume() {
super.onResume()
activity.setFullscreen(true)
}
override fun onPause() {
super.onPause()
activity.setFullscreen(false)
}
...
}
Допустим, у нас есть 2 разных фрагмента, FragmentA
и FragmentB
оба наследуют это FullscreenFragment
.
Проблема возникает, когда я перехожу с FragmentA
FragmentB
с использованием метода NavController.navigate
- в этом случае FragmentB.onResume
вызывается ДО FragmentA.onPause
. Это приводит к отключению полноэкранного режима после завершения перехода. То же самое происходит, когда я возвращаюсь от FragmentB
к FragmentA
- FragmentA.onResume
идет до FragmentB.onPause
.
Я подозреваю, что это происходит из-за реализации androidx.navigation.fragment.FragmentNavigator
, которая вызывает ft.setReorderingAllowed(true);
внутри метода public NavDestination navigate
, непосредственно перед фиксацией транзакции фрагмента.
В чем причина того, что этот вызов жестко закодирован в реальной частной реализации? Есть ли способ преодолеть эту проблему (кроме реализации пользовательского FragmentNavigator) и использовать естественный порядок обратных вызовов жизненного цикла?
Заранее спасибо!