Intereting Posts

Когда использовать методы прикрепления и отсоединения FragmentTransaction

Я просто просмотрел документацию методов attach() и detach() для FragmentTransaction :

attach() : Повторно присоединить фрагмент после того, как он был ранее отсоединен от пользовательского интерфейса с detach(Fragment) . Это приводит к тому, что его иерархия представлений будет воссоздана, присоединена к пользовательскому интерфейсу и отображена.

Ну, что это значит?

  1. В частности, я увидел пример:

     mMapFragment = new MapFragment(); ft.beginTransaction(mMapFragment) .attach() .add(R.id.container, mMapFragment) .commit(); 

    Я удалил attach() и попробовал еще раз: я не заметил никакой разницы. Что делает attach в этом примере? Какая разница по сравнению с этим:

     ft.beginTransaction() .add(R.id.container, mMapFragment) .commit(); 
  2. В случае, если вышеприведенный пример недостаточно хорош, чтобы показать разницу … Я просто хочу знать, когда нам нужно называть attach() и detach() явно? Было бы лучше, если бы вы могли объяснить разницу в отношении добавления / удаления / замены.

Solutions Collecting From Web of "Когда использовать методы прикрепления и отсоединения FragmentTransaction"

Я думаю, что лучше взглянуть на определение Detach и Remove in FragmentTransaction Documentation, чтобы понять, что происходит.

отрывать

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

Удалить

Удалите существующий фрагмент. Если он был добавлен в контейнер, его представление также удаляется из этого контейнера.

Это значит:

Отделив вас, вы уничтожите только фрагмент View, но сохраните его состояние в менеджере фрагментов. Однако, удалив, вы удалите фрагмент и его состояние из диспетчера фрагментов; Кроме того, он удалит представление фрагмента, если он был добавлен в контейнер пользовательского интерфейса. Таким образом, оба они уничтожают представление фрагмента, но detach сохраняет состояние фрагмента в менеджере фрагментов.


Теперь пришло время взглянуть на прикрепление и добавление.

Добавить

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

Прикреплять

Повторно присоедините фрагмент после того, как он был ранее удален из пользовательского интерфейса с отсоединением (фрагмент). Это приводит к тому, что его иерархия представлений будет воссоздана, присоединена к пользовательскому интерфейсу и отображена.

Это значит:

После добавления фрагмента он будет добавлен в состояние активности, и его представление будет добавлено к определенному представлению контейнера. Но при добавлении ничего не будет отображаться, если фрагмент не был добавлен в пользовательский интерфейс. Он просто придает менеджеру фрагментов. Однако, если вид уже был добавлен в контейнер в пользовательском интерфейсе и отсоединен после этого, добавив его, он будет отображаться снова в контейнере. Наконец, вы можете использовать attach и detach, если хотите временно уничтожить фрагмент View и хотите отображать и строить свой взгляд на будущее, не теряя при этом своего состояния.