Что такое Android Fragment: жизненный цикл и пример использования фрагментов | Prologistic.com.ua

Что такое Android Fragment: жизненный цикл и пример использования фрагментов

Мы продолжаем разработку под Android и в этой статье познакомимся с Android Fragment. Наша программа будет состоять из двух фрагментов и одного активити.

Что такое Fragment в Android?

Класс Fragment используется для построения динамического интерфейса андроид приложений и взаимодействуют с Activity. Главным преимуществом фрагментов является упрощение работы с UI (пользовательским интерфейсом) на экранах разных размеров. Одна Activity может взаимодействовать с неограниченным количеством фрагментов.

Android Fragment не является подклассом View, как большинство других компонентов пользовательского интерфейса. Вместо этого фрагмент содержит объект view внутри себя. Этот view отображается в Activity, к которой прикреплен фрагмент. Поскольку Android Fragment не является view, то и добавление его к Activity происходит не так, как какой-то TextView. Фрагмент добавляется в ViewGroup внутри Activity и view фрагмента отображается внутри этого ViewGroup.

Как Fragment работает с Activity?

Давайте рассмотрим последовательность взаимодействия активити с фрагментом:

  1. Activity получает ссылку на фрагмент.
  2. Затем она получает ссылку на ViewGroup, в котором будет отрисовываться view фрагмента.
  3. После этого активность добавляет фрагмент.
  4. Фрагмент создает свой view и возвращает его Activity.
  5. Этот view вставляется в ViewGroup и фрагмент начинает работу.

Как фрагмент связан с другими классами

Класс Fragment был добавлен еще в Android API 11 вместе с другими тесно связанными классами:

  1. Класс android.app.Fragment — базовый класс для работы с фрагментами
  2. Класс android.app.FragmentManager — класс для работы c фрагментами внутри Activity.
  3. Класс android.app.FragmentTransaction предоставляет набор операций для работы с фрагментами

Также в распоряжении программиста пакет библиотек совместимости, предоставляемых Google для поддержки версий меньше Android API 11. Например, класс android.support.v4.app.FragmentActivity является подклассом Activity, который обеспечивает работу с фрагментами.

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

Жизненный цикл Fragment управляется 10 методами:

  • Метод onAttach() будет вызван самым первым еще до метода onCreate(), тем самым присоединив фрагмент к активити.
  • Метод onCreateView(). Система вызывает этот метод, когда фрагмент прорисовывается в первый раз.
  • Метод onViewCreated() будет вызван сразу после onCreateView().
  • Метод onActivityCreated() будет вызван после методов onCreate() и onCreateView(). Он может быть использован для инициализации объектов фрагмента.
  • Метод onStart() вызывается один раз — фрагмент становится видимым для пользователя.
  • Метод onPause() вызывается системой, когда пользователь уходит с фрагмента. В этом методе обычно сохраняют результаты работы пользователя.
  • Метод onStop(). Работа фрагмента будет остановлена вызовом метода onStop().
  • Метод onDestroyView() вызывается  перед методом onDestroy(). Метод является противоположностью onCreateView(), в котором мы создавали пользовательский интерфейс.
  • Метод onDestroy() вызывается для очистки состояния фрагмента, но система Android не гарантирует его вызов.
  • Метод onDetach() будет вызван после onDestroy(), чтобы уведомить нас о том, что фрагмент был окончательно отделен от Activity.

Пример работы с Android Fragment

Сейчас мы напишем приложение с одной MainActivity и двумя фрагментами: MainFragment и DetailsFragment. Для этого нам подойдет базовый Hello World проект (кто не знает как создать новый проект в Android Studio, советую сначала начать с него).

А начнем мы с макета activity_main.xml для MainActivity:

Обратите внимание: с помощью атрибута class мы явно задаем принадлежность макета фрагмента определенному классу.

С помощью атрибута layout_weight мы определяем вес каждого фрагмента, а точнее сколько места на экране получит тот или другой фрагмент.

Код класса MainActivity представлен ниже:

В самом коде MainActivity мы ниже не меняли. Установка фрагментов происходила в макете activity_main, поэтому при старте приложения мы сразу будем видеть фрагменты.

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

Макет main_fragment.xml представлен ниже:

Листинг класса MainFragment.java:

Макет details_fragment.xml представлен ниже:

Класс DetailsFragment.java на листинге ниже:

Теперь давайте запустим приложение и посмотрим результаты работы:

fragments

Как видим, нажимая на пункты в фрагменте MainFragment, мы изменяем текст на TextView во фрагменте DetailsFragment. Следите за обновлениями раздела Разработка приложений на Android.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *