Как сохранить состояние всех действий в навигации

«Как сохранить состояние всех действий в навигации» — вопрос из категории Android компоненты, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для сохранения состояния всех экранов в навигации используйте FragmentStatePagerAdapter (для ViewPager) или NavController с FragmentManager.

Ключевые моменты:

  1. Для ViewPager:
viewPager.adapter = FragmentStatePagerAdapter(
    supportFragmentManager,
    BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
) {
    // ваши фрагменты
}
  1. Для Navigation Component:
<navigation>
    <fragment 
        android:id="@+id/myFragment"
        android:name="com.example.MyFragment"
        android:label="My Fragment">
        <argument .../>
    </fragment>
</navigation>
  1. Включите сохранение состояния в NavHostFragment:
navHostFragment.childFragmentManager.enableSavedStateHandling()

Для сложных сценариев можно использовать SavedStateHandle в ViewModel. Не забывайте, что сохранение большого количества состояний может привести к утечкам памяти.