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

Методы фрагмента: attach(), detach(), remove(), replace(), popBackStack()

Я очень смущен между этими функциями и их целями. Я заметил, что использование replace() заменяет существующий фрагмент на новый. Мы можем использовать addToBackStack(null), чтобы поместить этот фрагмент в задний стек, чтобы мы могли вернуться к ранее показанному фрагменту. Теперь, когда фрагмент добавляется (или заменяется) - onAttach()onCreate() и т.д. Методы фрагмента вызываются по порядку.

Теперь, когда мы вызываем remove() на фрагмент из нашей активности, какие функции этого фрагмента вызываются и в каком порядке?

Что делают attach() и detach()? Удаляет ли detach() фрагмент? И когда используются эти два attach() и detach(), какие функции этого фрагмента вызываются и в каком порядке <

Кроме того, что происходит на popBackStack()? Я имею в виду, какие функции вызывается, когда мы используем popBackStack() для фрагмента из нашей активности?

И когда вызывается onDestroy()?

Спасибо.

4b9b3361

Ответ 1

Теперь, когда мы вызываем remove() для фрагмента из нашей деятельности, какие функции фрагмента вызываются и в каком порядке?

Посмотрите на http://developer.android.com/reference/android/app/Fragment.html.

Порядок: onPause(), onStop(), onDestroyView(), onDestroy(), onDetach()

Что делают attach() и detach()? Detach() удаляет фрагмент? И когда используются эти два attach() и detach(), какие функции фрагмента вызываются и в каком порядке??

attach() и detach() соответственно ассоциируют или отсоединяют Fragment с/от Activity. При присоединении Fragment onAttach() метод жизненного цикла onAttach(), при отсоединении метод жизненного цикла onDetach() вызывается во Fragment. Для получения дополнительной информации посмотрите на ссылку выше.

Кроме того, что происходит с popBackStack()?? Я имею в виду, какие функции вызываются, когда мы используем popBackStack() для фрагмента из нашей деятельности??

Если Fragment не был уничтожен, то для popBackStack() onStart() и onResume(). Если Fragment был уничтожен ранее, то методы жизненного цикла будут вызываться, начиная с onAttach(). Это так же, как при нажатии кнопки "Назад" в разделе " Activities.

Ответ 2

Просто заметьте на popBackStack(). Он не выдает фрагмент, он выдает фрагмент транзакции. Таким образом, любая последняя транзакция фрагмента была отменена. Если вы показывали FragmentA, и ваша транзакция была:

fragmentTransaction.replace(R.id.your_layout, fragmentB);
fragmentTransaction.addToBackStack(null);

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

Ответ 3

Предположим, что фрагмент A и фрагмент B были добавлены в контейнер со следующими этапами:

1. Added fragment A =>  .replace(R.id.container, fragmentA) => addToBackStack(null)
2. Added fragment B =>  .replace(R.id.container, fragmentB) => addToBackStack(null)
3. Removed fragment B => fragmentManager.popBackStack();

Обратные вызовы, когда вызывается fm.popBackStack():

FragmentB: onPause()
FragmentB: onStop()
FragmentB: onDestroy()
FragmentB: onDetach()
FragmentA: onCreateView()
FragmentA: onViewCreated()
FragmentA: onActivityCreated()
FragmentA: onStart()
FragmentA: onResume()

Объяснение: Почему при удалении и уничтожении фрагмента B, используя popBackStack(), фрагмент A был создан снова и возобновлен?

Ans: Когда вы добавили фрагмент B, вы использовали replace() и addToBackStack(), поэтому все фрагменты были удалены из контейнера, а фрагмент B был добавлен в контейнер. А также эта транзакция была записана в стек "Назад". Итак, когда вызывается fm.popBackStack(), сначала транзакция выталкивается из заднего стека, и поэтому операции возвращаются, поэтому фрагмент b удаляется из контейнера и уничтожается. И все остальные фрагменты добавляются, для нашего фрагмента фрагмента в контейнер добавляется представление. Также отмечено, что фрагмент A onAttach и onCreate() не вызывается, поскольку он уже был создан и прикреплен к MainActivity ранее.

Назад на фрагмент B делает то же самое:

If you press the back button, it calls fm.popBackStack() and pops the transaction.