Переключение фрагментов с помощью кода

FragmentTransaction — это класс, который позволяет нам программно добавлять и удалять фрагменты. Он работает с бэкстэком точно так же, как тот, который используется в нашей деятельности. Все, что нам нужно, это ViewGroup для хранения фрагментов.

Я собираюсь перечислить шаги, необходимые для работы с экземплярами FragmentTransaction. Все фрагменты кода, которые я запишу, будут основаны на предположении, что в нашем xml-файле макета есть FrameLayout с id fragmentcontainer, который содержит или будет содержать фрагменты, с которыми мы будем проводить транзакцию, и что ссылка на новый фрагмент называется newFragment.
Требуются следующие шаги:

  1. Создайте экземпляр FragmentTransaction в вашей деятельности.
  2. Укажите изменения, которые должна включать транзакция.
  3. Добавьте транзакцию в стек.
  4. Зафиксируйте транзакцию.

Давайте рассмотрим каждый из этих шагов подробнее.

Создание фрагментной транзакции

Фрагментные транзакции создаются внутри действий. Чтобы создать FragmentTransaction, вы вызываете метод beginTransaction() на результат вызова getSupportFragmentManager().

Вы можете создать FragmentTransaction с помощью приведенного ниже фрагмента кода:

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
Вход в полноэкранный режим Выход из полноэкранного режима

Указание изменений в транзакции фрагмента

Фрагментная транзакция FragmentTransaction может содержать различные изменения. Каждое изменение задается методом. Некоторые из этих методов: add(), replace() и remove().

add() и replace()

Метод add() добавляет новый фрагмент в стек. В приведенном ниже фрагменте кода показано, как использовать этот метод:

transaction.add(R.id.fragmentcontainer, newFragment);
Войти в полноэкранный режим Выйти из полноэкранного режима

Метод replace() заменяет существующий фрагмент на новый. В приведенном ниже фрагменте кода показано, как использовать этот метод:

transaction.replace(R.id.fragmentcontainer, newFragment);
Вход в полноэкранный режим Выход из полноэкранного режима

Разбивка кода

Методы add() и replace() принимают два аргумента. Это:

  • id группы ViewGroup, содержащей фрагмент.

  • Новый фрагмент, на который вы хотите добавить или заменить старый фрагмент.

В приведенных выше фрагментах кода transaction — это экземпляр FragmentTransaction, fragmentcontainer — это идентификатор ViewGroup в нашей активности, содержащей фрагмент, а newFragment — это ссылка на новый фрагмент, который мы хотим добавить в стек или заменить им текущий.

remove()

Метод remove() удаляет фрагмент из бэкстека фрагментов.

transaction.remove(currentFragment);
Вход в полноэкранный режим Выход из полноэкранного режима

Разбивка кода

Метод remove принимает один аргумент — ссылку на фрагмент, который мы хотим удалить. Приведенный выше фрагмент кода удалит из бэкстека фрагмент, на который ссылается currentFragment.

Добавление FragmentTransaction в стек Backstack

Вы добавляете FragmentTransaction в стек с помощью метода addToBackStack().
Этот метод принимает один аргумент — строку, которую вы используете для обозначения транзакции на случай, если вам понадобится извлечь транзакцию программно.

transaction.addToBackstack("transaction_id");
Вход в полноэкранный режим Выход из полноэкранного режима

В приведенном выше коде строка «transaction_id» может быть использована позже для извлечения транзакции. Вы также можете передать null в метод addToBackStack(), если не хотите передавать строку.

Фиксация транзакции

Вы фиксируете транзакцию FragmentTransaction, вызывая метод commit() для экземпляра транзакции.

transaction.commit();
Вход в полноэкранный режим Выход из полноэкранного режима

Когда вы вызываете commit(), изменения, которые вы сохранили в FragmentTransaction, применяются к вашему приложению.

Резюме

Чтобы программно переключать фрагменты, выполните следующие действия:

  1. Создайте FragmentTransaction в вашей деятельности.
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
Войдите в полноэкранный режим Выйдите из полноэкранного режима
  1. Укажите изменения, которые должна включать транзакция.
transaction.add(R.id.fragmentcontainer, newFragment);
Войти в полноэкранный режим Выйти из полноэкранного режима
  1. Добавить транзакцию в стек.
transaction.addToBackstack("transaction_id");
Войти в полноэкранный режим Выйти из полноэкранного режима
  1. Зафиксировать транзакцию.
transaction.commit();
Войти в полноэкранный режим Выход из полноэкранного режима

Предыдущая статья: Фрагменты списка
Следующая статья: Динамические фрагменты

Оцените статью
devanswers.ru
Добавить комментарий