В какой ситуации мы хотим добавить фрагмент без контейнера?

У транзакции фрагмента есть метод add (фрагмент фрагмента, тег String), который не помещает фрагмент в контейнер, поэтому он не может иметь вид. Для чего его можно использовать?

Ответы

Ответ 1

Из документации для Android:

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

Как насчет этой цели?

Простой пример: a Activity запускает AsyncTask, но когда устройство повернуто Activity перезапускается, вызывая AsyncTask потерять соединение с потоком пользовательского интерфейса. Но этот Activity может содержать Fragment (невидимый, без интерфейса), который может обрабатывать все AsyncTask. Когда Activity воссоздается, ОС Android заботится о повторном подключении Fragment, поэтому потеря данных не произойдет.

Ответ 3

Как упоминает @Lucius Hipan, его можно использовать для предотвращения потери данных. Почти всегда этот король фрагментов используется как резервный контейнер (setRetainInstance (true), вызываемый методом onCreate), то после изменения конфигурации устройства (например, изменения ориентации) фрагмент не будет воссоздан, но будет помнить предыдущее состояние. Он рекомендовал использовать asynctask.

Вот пример:

Есть активность входа. Пользователь вводит свои учетные данные и нажимает кнопку "Вход". После этого происходит изменение конфигурации (пользователь поворачивает телефон). Итак, сетевая задача была завершена, но ваши обработчики не слушали ее сейчас. Если вы показываете анимацию входа, ее можно сохранить через savedInstance, но слушателей нет. И вместо создания сервиса вы можете просто создать новый сохранившийся фрагмент с постоянной асинтемой и интерфейсом для взаимодействия с активностью.

Этот метод является хорошим компромиссом для небольших проектов, где использование библиотек шины является завышением.

Ответ 4

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

Чтение http://developer.android.com/guide/components/fragments.html настоятельно рекомендуется.

Пример сохранения экземпляра: https://android.googlesource.com/platform/development/+/master/samples/ApiDemos/src/com/example/android/apis/app/FragmentRetainInstance.java

Кроме того, здесь есть похожие вопросы (так что эти вопросы, кажется, дублируются, но не могут быть отмечены из-за щедрости):

Ответ 5

Вызывая метод add(Fragment fragment, String tag) внутренне вызывает add(int containerId, Fragment fragment, String tag) с 0 containerId.That будет add(0, fragment, tag). Если 0 поставляется как containerId, он не будет размещен в контейнере.