Когда использовать attach и DETACH методы FragmentTransaction
Я только что просмотрел документацию attach()
и detach()
способы FragmentTransaction
:
attach()
: повторно прикрепите фрагмент после того, как он ранее был отделен от пользовательского интерфейса с помощьюdetach(Fragment)
. Это приводит к повторному созданию иерархии представлений, присоединению к пользовательскому интерфейсу и отображению.
Ну, что это значит?
-
более конкретно, я видел пример:
mMapFragment = new MapFragment(); ft.beginTransaction(mMapFragment) .attach() .add(R.id.container, mMapFragment) .commit();
Я удалил
attach()
и попробовал еще раз: я не заметил никакой разницы. Что делаетattach
сделать в этом примере? В чем разница по сравнению с этим:ft.beginTransaction() .add(R.id.container, mMapFragment) .commit();
в случае, если приведенный выше пример недостаточно хорош, чтобы показать разницу... Я просто хочу знать, когда нам нужно назвать
attach()
иdetach()
явно? Было бы лучше, если бы вы могли объяснить разницу в отношении добавления/удаления/замены.
1 ответов
Я думаю, что лучше взглянуть на определение отсоединения и удаления в Документация По FragmentTransaction чтобы понять, что происходит.
отключить
отсоедините данный фрагмент от пользовательского интерфейса. Это то же самое состояние, когда он помещается в задний стек: фрагмент удаляется из пользовательского интерфейса, однако его состояние по-прежнему активно управляется фрагментом менеджер. При переходе в это состояние иерархия представления разрушенный.
удалить
удалить существующий фрагмент. Если он был добавлен в контейнер, его вид также извлекается из этого контейнера.
это значит:
By снятие вы только уничтожаете представление фрагмента, но сохраняете его состояние в диспетчере фрагментов. Однако, к удаление вы удалите фрагмент и его состояние из диспетчера фрагментов; кроме того, он удалит фрагмент вид, если он был добавлен в контейнер пользовательского интерфейса. Поэтому оба они уничтожают представление фрагмента, но detach сохраняет состояние фрагмента в диспетчере фрагментов.
теперь пришло время взглянуть на attach и add.
добавить
добавить фрагмент в состояние действия. Этот фрагмент может необязательно также есть свой вид (если фрагмент.onCreateView возвращает ненулевое значение) в a представление контейнера действия.
прикрепить
снова прикрепить фрагмент после того, как ранее он был deatched из пользовательского интерфейса с отсоединением (фрагмент). Это приводит к иерархии представлений повторно создан, прикреплен к пользовательскому интерфейсу и отображается.
это значит:
после добавления фрагмента он будет добавлен в состояние активности, и его представление будет добавлено в определенное представление контейнера. Но при прикреплении ничего не будет отображаться, если фрагмент еще не был добавлен в пользовательский интерфейс. Он просто прикрепляется к менеджеру фрагментов. Однако, если представление было уже добавленный в контейнер в UI и отсоединенный после этого, путем присоединения он будет отображаться снова в своем контейнере. Наконец, вы можете использовать attach и detach, если вы хотите временно уничтожить представление фрагмента и хотите отобразить и построить его представление в будущем, не теряя его состояния внутри действия.