Почему состояние View может не сохраняться во фрагменте

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

Ответ

Состояние View может не сохраняться во фрагменте по нескольким причинам:

  1. Отсутствие ID у View – для сохранения состояния у View должен быть установлен android:id. Без ID система не знает, как сопоставить состояние.
<TextView
    android:id="@+id/myTextView"  <!-- без этого состояние не сохранится -->
    ... />
  1. Фрагмент не вызывал onSaveInstanceState() – если фрагмент был уничтожен (например, при повороте экрана), но не сохранил состояние.

  2. saveEnabled = false – явное отключение сохранения состояния у View:

myView.isSaveEnabled = false
  1. Использование setRetainInstance(true) – это сохраняет экземпляр фрагмента, но не состояние его View.

  2. Неправильная работа с Bundle – если в onSaveInstanceState() не сохраняются нужные данные или не восстанавливаются в onViewStateRestored().