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

Что такое фрагменты и их жизненный цикл?

2.0 Middle🔥 172 комментариев
#Жизненный цикл и навигация

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

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

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

Фрагменты (Fragments) в Android

Фрагменты — это компоненты приложения, которые представляют собой повторно используемую часть пользовательского интерфейса (UI) и логики. Они действуют внутри активности (Activity), подобно "под-активности", и позволяют создавать модульные, адаптивные интерфейсы, особенно для планшетов, складных устройств и многоконтейнерных макетов.

Ключевые особенности:

  • Живут внутри Activity: Не имеют собственного контекста, используют контекст активности-хоста.
  • Имеют собственный жизненный цикл, но зависят от жизненного цикла родительской активности.
  • Могут добавляться, удаляться, заменяться динамически во время выполнения (transactions).
  • Позволяют повторно использовать UI-логику в разных активностях.

Жизненный цикл фрагмента

Жизненный цикл фрагмента включает 11 состояний и 7 основных колбэков, более сложный, чем у Activity, из-за зависимости от родительской активности и возможности динамического управления.

Основные методы жизненного цикла:

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

Графическое представление:

onAttach → onCreate → onCreateView → onViewCreated → onStart → onResume → [Активное состояние] → onPause → onStop → onDestroyView → onDestroy → onDetach

Пример базового фрагмента:

class ExampleFragment : Fragment() {

    override fun onAttach(context: Context) {
        super.onAttach(context)
        // Связь с активностью
    }

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

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Инфлейт макета
        return inflater.inflate(R.layout.fragment_example, 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 = "Фрагмент создан"
    }

    override fun onDestroyView() {
        // Очистка ссылок на View для избежания утечек памяти
        super.onDestroyView()
    }
}

Особенности и важные аспекты

Состояния фрагмента:

  • CREATED — после onCreate(), но до onCreateView()
  • VIEW_CREATED — после onCreateView()
  • STARTED — после onStart()
  • RESUMED — после onResume() (активное состояние)

Взаимосвязь с Activity:

  • Если активность остановлена (onStop()), фрагмент также получает onStop().
  • При повороте экрана фрагмент уничтожается и создаётся заново (если не использовать setRetainInstance(true) для фрагментов без UI).

Back Stack фрагментов:

При замене фрагментов можно добавить транзакцию в стек возврата:

supportFragmentManager
    .beginTransaction()
    .replace(R.id.container, NewFragment())
    .addToBackStack("fragment_tag")
    .commit()

Коммуникация между фрагментами:

  • Через общую ViewModel (рекомендовано).
  • Через родительскую Activity как посредник.
  • Используя Интерфейсы (callback'и).

Фрагменты значительно упрощают создание адаптивных интерфейсов, но требуют аккуратного управления жизненным циклом во избежание утечек памяти и непредсказуемого поведения, особенно при работе с FragmentManager и транзакциями.

Что такое фрагменты и их жизненный цикл? | PrepBro