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

1 ответов


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

отключить

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

удалить

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

это значит:

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


теперь пришло время взглянуть на attach и add.

добавить

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

прикрепить

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

это значит:

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