← Назад к вопросам

Какой жизненный цикл у Fragment?

1.6 Junior🔥 251 комментариев
#Android компоненты#Жизненный цикл и навигация

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Жизненный цикл Fragment в Android

Fragment — это reusable модуль интерфейса, который может быть встроен в Activity. Его жизненный цикл более сложный, чем у Activity, поскольку он напрямую зависит от жизненного цикла родительской Activity и может быть управляем независимо (например, в FragmentManager). Основные состояния и методы жизненного цикла Fragment следующие:

Основные состояния Fragment

  1. onAttach(): Fragment ассоциируется с Activity.
  2. onCreate(): Инициализация Fragment (но не UI).
  3. onCreateView(): Создание и возврат View-компонента Fragment.
  4. onViewCreated(): View создана, можно работать с элементами.
  5. onActivityCreated(): Activity создана, можно работать с её элементами.
  6. onStart(): Fragment становится видимым.
  7. onResume(): Fragment готов к взаимодействию с пользователем.
  8. onPause(): Fragment частично скрыт (например, другая Activity частично перекрывает).
  9. onStop(): Fragment полностью скрыт.
  10. onDestroyView(): View уничтожается (Fragment может оставаться в памяти).
  11. onDestroy(): Fragment уничтожается.
  12. onDetach(): Fragment отсоединяется от Activity.

Зависимость от Activity

Жизненный цикл Fragment тесно связан с Activity. Например:

  • onAttach() вызывается, когда Fragment добавляется в Activity.
  • onActivityCreated() сигнализирует, что родительская Activity полностью создана.
  • Если Activity уничтожается, все её Fragments также уничтожаются.

Особенности управления

Fragment может быть добавлен в back stack FragmentManager, что позволяет управлять его состоянием при навигации. Когда Fragment добавляется в back stack, при переходе назад он не уничтожается полностью, а проходит через onDestroyView(), сохраняя состояние.

Ключевые методы для работы с состоянием

Для сохранения состояния Fragment используется onSaveInstanceState(), аналогично Activity. Состояние можно восстановить в onCreate(), onCreateView() или onViewCreated().

Пример базового Fragment с переопределением основных методов:

class MyFragment : Fragment() {

    override fun onAttach(context: Context) {
        super.onAttach(context)
        // Fragment теперь связан с Activity/Context
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // Инициализация данных, восстановление состояния из savedInstanceState
    }

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Создание View из layout-файла
        return inflater.inflate(R.layout.fragment_my, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        // Настройка View элементов, например:
        val textView = view.findViewById<TextView>(R.id.text_view)
        textView.text = "Fragment создан"
    }

    override fun onStart() {
        super.onStart()
        // Fragment видим
    }

    override fun onResume() {
        super.onResume()
        // Fragment активен и готов к взаимодействию
    }

    override fun onPause() {
        super.onPause()
        // Fragment частично скрыт
    }

    override fun onStop() {
        super.onStop()
        // Fragment не видим
    }

    override fun onDestroyView() {
        super.onDestroyView()
        // View уничтожена, но Fragment может оставаться
    }

    override fun onDestroy() {
        super.onDestroy()
        // Fragment уничтожается
    }

    override fun onDetach() {
        super.onDetach()
        // Fragment отсоединён от Activity
    }
}

Особенности жизненного цикла в различных сценариях

  • Добавление Fragment в Activity: Вызывается последовательность onAttach(), onCreate(), onCreateView(), onViewCreated(), onActivityCreated(), onStart(), onResume().
  • Уничтожение Fragment: Вызывается onPause(), onStop(), onDestroyView(), onDestroy(), onDetach().
  • Fragment в back stack: При переходе на другой Fragment вызывается onPause(), onStop(), onDestroyView(). При возврате назад вызывается onCreateView(), onViewCreated(), onActivityCreated(), onStart(), onResume().

Практические рекомендации

  • Инициализация UI должна выполняться в onViewCreated(), поскольку View гарантированно создана.
  • Работа с данными может выполняться в onCreate(), но для обращения к View необходимо ждать onViewCreated().
  • Сохраняйте состояние в onSaveInstanceState(), чтобы восстановить его после временного уничтожения (например, при повороте экрана или помещении в back stack).

Понимание жизненного цикла Fragment критически важно для создания стабильных, эффективных Android-приложений, особенно с сложной навигацией и управлением состояниями.

Какой жизненный цикл у Fragment? | PrepBro