Intereting Posts
Разделение на Java всегда приводит к нулю (0)? Укажите канал (или частоту) для сканирования Wi-Fi в Android Как заполнить Spinner значением int Как отправить сообщение на устройство с использованием C2DM с сервера, прошедшего проверку подлинности с помощью OAuth2? Создать группу контактов gmail в android Как вы остановите ADT Logcat View из автоматического появления в Eclipse? Android: Что означает это предупреждение? – (WebCore) Как защитить медиаконтент (видео, аудио) на Android от сохранения / перераспределения? Как создать триггер между обычной таблицей и таблицей fts3? Обработка сценариев Push Notification на iOS и Android Как воспроизводить видео в веб-браузере Android с помощью html5 Фон с Android-навигацией Android – проверка аккаунта Google Analytics Где Android Account Manager хранит особые настройки учетной записи? При нажатии на googleMap Marker на Android в правом нижнем углу отображаются две кнопки, можно ли их отключить?

Разница между add (), replace () и addToBackStack ()

В чем основное различие между вызовами этих методов:

fragmentTransaction.addToBackStack(name); fragmentTransaction.replace(containerViewId, fragment, tag); fragmentTransaction.add(containerViewId, fragment, tag); 

Что означает замена уже существующего фрагмента и добавление фрагмента в состояние активности и добавление активности в задний стек?

Во-вторых, с помощью findFragmentByTag() этот поиск тега добавлен методом add() / replace() или методом addToBackStack() ?

1) fragmentTransaction.addToBackStack(str);

Описание. Добавьте эту транзакцию в задний стек. Это означает, что транзакция будет запомнена после ее фиксации и изменит ее действие, когда позже выскочит из стека.

2) fragmentTransaction.replace(int containerViewId, Fragment fragment, String tag)

Описание. Замените существующий фрагмент, добавленный в контейнер. Это по существу то же самое, что и вызов remove (Fragment) для всех добавленных в настоящее время фрагментов, которые были добавлены с тем же контейнером, и затем добавьте (int, Fragment, String) те же аргументы, приведенные здесь.

3) fragmentTransaction.add(int containerViewId, Fragment fragment, String tag)

Описание – добавление фрагмента в состояние активности. Этот фрагмент может также иметь свое представление (если Fragment.onCreateView возвращает ненулевой) в представление контейнера активности.

Что означает замена уже существующего фрагмента и добавление фрагмента в состояние активности и добавление активности в задний стек?

Существует стек, в котором хранятся все действия в рабочем состоянии. Фрагменты относятся к этой деятельности. Поэтому вы можете добавить их, чтобы внедрить их в действие.

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

Когда вы переходите к текущему макету, у вас есть идентификатор этого контейнера, чтобы заменить его на нужный фрагмент.

Вы также можете вернуться к предыдущему фрагменту в backStack с помощью popBackStack() . Для этого вам нужно добавить этот фрагмент в стек, используя addToBackStack() а затем commit() для отражения. Это в обратном порядке с током сверху.

FindFragmentByTag выполняет поиск по тегу, добавленному методом add / replace или addToBackStack?

Если это зависит от того, как вы добавили тег. Затем он просто находит фрагмент по своему тегу, который вы определили до того, как он был взят от XML или предоставлен при добавлении в транзакции.

Ссылки: FragmentTransaction

Еще одна важная разница между add и replace : replace удаляет существующий фрагмент и добавляет новый фрагмент. Это означает, что при нажатии кнопки возврата фрагмент, который был заменен, будет создан при вызове onCreateView. В то время как add сохраняет существующие фрагменты и добавляет новый фрагмент, который означает, что существующий фрагмент будет активным, и они не будут находиться в состоянии «приостановлено», поэтому при нажатии кнопки «Назад» onCreateView не вызывается для существующего фрагмента (фрагмент, который был там до нового Фрагмент). Что касается событий жизненного цикла фрагмента onPause, onResume, onCreateView и другие события жизненного цикла будут вызываться в случае replace но они не будут вызваны в случае add .

Изменить : нужно быть осторожным, если она использует какую-то библиотеку событийных событий, такую как Eventbus Greenrobot, и повторное использование одного и того же фрагмента, чтобы уложить фрагмент поверх другого через add . В этом случае, несмотря на то, что вы следуете наилучшей практике и регистрируете шину событий в onResume и не регистрируете в onPause , шина событий все равно будет активна в каждом экземпляре добавленного фрагмента, так как фрагмент add будет вызывать ни один из этих методов жизненного цикла фрагмента. В результате прослушиватель событий в каждом активном экземпляре фрагмента обрабатывал одно и то же событие, которое может быть не таким, каким вы хотите.

Основная разница между add() и replace() может быть описана как:

  • add() используется для простого добавления фрагмента к некоторому корневому элементу.
  • replace() ведет себя аналогично, но сначала удаляет предыдущий фрагмент и затем добавляет следующий фрагмент.

Мы можем видеть точное отличие, когда мы используем addToBackStack() вместе с add() или replace() .

Когда мы нажимаем кнопку «Назад» после add() … onCreateView никогда не вызывается. Но в случае replace() , когда мы нажимаем кнопку «назад» … каждый раз вызывается oncreateView.