Для управления фрагментами используются два класса:
FragmentManager и
FragmentTransaction.
Для получения
FragmentManager используются метод активити
getSupportFragmentManager() или метод фрагмента
getChildFragmentManager().
FragmentManager начинает транзакцию и возвращает объект
FragmentTransaction вызовом метода
beginTransaction().
Методы класса
FragmentTransaction, которые необходимо знать -
add(),
remove() и
replace().
add() добавляет фрагмент на активити или другой фрагмент. Принимает аргументами
containerViewId, в который добавляется фрагмент, инстанс фрагмента, тег.
Другой способ добавить фрагмент - определить в лэйауте с помощью тега
<fragment>.
remove() - операция, обратная
add(). Удаляет фрагмент.
replace() удаляет все фрагменты, добавленные методом
add() в заданный контейнер, и добавляет переданный аргументом фрагмент в контейнер. Параметр
tag может быть null.
Эти операции не выполняются сразу же после вызова методов. Метод
commit() завершает транзакцию и выполняет операции транзакции.
Метод
addToBackStack() добавляет транзакцию в Back Stack. Это значит, что когда пользователь нажмет Back транзакция откатится.
addToBackStack() применяется ко всем операциям в транзакции. Например следующий код добавляет транзакцию из трех операций в бэкстэк:
fragmentTransaction
.add(R.id.fragmentContainer1, fragment1)
.add(R.id.fragmentContainer2, fragment2)
.replace(R.id.fragmentContainer1, fragment3)
.addToBackStack("tag")
.commit()Метод
popBackStack() удаляет транзакцию с верхушки бэкстэка, возвращает
true, если бэкстэк хранил хотя бы одну транзакцию.
Документация.