Називання методів управління фрагментами дуже заплутано навіть на думку інженерів Google на дошках оголошень (див. Коментарі вище). Я зробив собі невелику демонстрацію, щоб зрозуміти, як все насправді працює. Ось мої висновки. Не соромтеся виправити мене, якщо я помиляюся.
Щоб спочатку додати фрагмент до діяльності, ви використовуєте: getFragmentManager (). BeginTransaction (). Add (R.id.container, mFragment) .commit ().
Це пов'язує активність з фрагментом, а також пов'язує погляд з фрагментом.
Ось отримані події життєвого циклу та інші важливі методи повернення значень:
onAttach()
onCreate()
onCreateView()
onViewCreated()
onActivityCreated()
onViewStateRestored()
onStart()
onResume()
mFragment.getView() == null: false
mFragment.getActivity() == null: false
Щоб вилучити фрагмент із діяльності, ви використовуєте: getFragmentManager (). BeginTransaction (). Remove (mFragment) .commit ().
Це видаляє будь-яку асоціацію з представленням даних або з діяльністю.
Ось отримані події життєвого циклу та інші важливі методи повернення значень:
onPause()
onStop()
onDestroyView()
onDestroy()
onDetach()
mFragment.getView() == null: true
mFragment.getActivity() == null: true
Я знову додав тут фрагмент
Щоб від'єднати доданий фрагмент від активності, ви використовуєте: getFragmentManager (). BeginTransaction (). Detach (mFragment) .commit ().
Це видаляє будь-яку асоціацію з представленням даних, але зберігає зв'язок із активністю.
Ось отримані події життєвого циклу та інші важливі методи повернення значень:
onPause()
onStop()
onDestroyView()
mFragment.getView() == null: true
mFragment.getActivity() == null: false
Для повторного вкладення фрагмента, від'єднаного до Діяльності, ви використовуєте: getFragmentManager (). BeginTransaction (). Attach (mFragment) .commit ().
Це створює новий Вид для асоціації з Фрагментом і підтримує асоціацію Діяльність.
Ось отримані події життєвого циклу та інші важливі методи повернення значень:
onCreateView()
onViewCreated()
onActivityCreated()
onViewStateRestored()
onStart()
onResume()
mFragment.getView() == null: false
mFragment.getActivity() == null: false
Інші важливі речі, які слід зазначити: Якщо ви вилучите фрагмент, а потім спробуйте додати його знову, використовуючи додавання (), а не прикріплення (), ніби нічого не зміниться.
якщо ви намагаєтеся додати фрагмент, який був видалений за допомогою видалення () за допомогою приєднання (), а не додавання (), схоже, нічого не зміниться.
Коли getView () повертає null, фрагмент все ще може мати внутрішні посилання на останній створений ним перегляд. Цей вид більше не дійсний і його не слід використовувати.
Fragment
це окремо стоїть , йогоonPause
,onStop
іonDestroyView
методи називаються тільки (в такому порядку). З іншого боку, колиFragment
буде видалена , їїonPause
,onStop
,onDestroyView
,onDestroy
іonDetach
методи називаються (в зазначеному порядку). Аналогічним чином , коли прикріплення , тоFragment
«иonCreateView
,onStart
іonResume
методи називаються тільки; і коли додавання , щоFragment
«иonAttach
,onCreate
,onCreateView
,onStart
іonResume
методи називаються (в зазначеному порядку).