Подтвердить что ты не робот

Когда использовать методы прикрепления и отсоединения 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()? Было бы лучше, если бы вы могли объяснить разницу в отношении добавления/удаления/замены.

4b9b3361

Ответ 1

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

Detach

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

Удалить

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

Это означает:

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


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

Добавить

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

Присоединить

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

Это означает:

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