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

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

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

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

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

А когда делает onDestroy ()?

Спасибо.

Solutions Collecting From Web of "Методы фрагмента: attach (), detach (), remove (), replace (), popBackStack ()"

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

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

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

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

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

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

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

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

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

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

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

 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 view был создан снова и возобновлен?

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

Обратное нажатие на фрагмент B делает то же самое:

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