Nazewnictwo metod zarządzania fragmentami jest bardzo mylące, nawet według inżynierów Google na forach dyskusyjnych (patrz komentarze powyżej). Zrobiłem sobie małe demo, aby dowiedzieć się, jak to naprawdę działa. Oto moje ustalenia. Jeśli się mylę, możesz mnie poprawić.
Aby początkowo dodać fragment do działania, użyj: getFragmentManager (). BeginTransaction (). Add (R.id.container, mFragment) .commit ().
To kojarzy działanie z fragmentem, a także kojarzy widok z fragmentem.
Oto wynikowe zdarzenia cyklu życia i inne ważne wartości zwracane przez metody:
onAttach()
onCreate()
onCreateView()
onViewCreated()
onActivityCreated()
onViewStateRestored()
onStart()
onResume()
mFragment.getView() == null: false
mFragment.getActivity() == null: false
Aby usunąć fragment z działania, użyj: getFragmentManager (). BeginTransaction (). Remove (mFragment) .commit ().
Spowoduje to usunięcie wszelkich skojarzeń z widokiem lub działaniem.
Oto wynikowe zdarzenia cyklu życia i inne ważne wartości zwracane przez metody:
onPause()
onStop()
onDestroyView()
onDestroy()
onDetach()
mFragment.getView() == null: true
mFragment.getActivity() == null: true
Tutaj ponownie dodałem fragment
Aby odłączyć dodany fragment od działania, użyj: getFragmentManager (). BeginTransaction (). Detach (mFragment) .commit ().
Spowoduje to usunięcie wszelkich skojarzeń z widokiem, ale zachowa skojarzenie z działaniem.
Oto wynikowe zdarzenia cyklu życia i inne ważne wartości zwracane przez metody:
onPause()
onStop()
onDestroyView()
mFragment.getView() == null: true
mFragment.getActivity() == null: false
Aby ponownie dołączyć fragment, który został odłączony do działania, użyj: getFragmentManager (). BeginTransaction (). Attach (mFragment) .commit ().
Spowoduje to utworzenie nowego widoku do skojarzenia z fragmentem i zachowanie powiązania działania.
Oto wynikowe zdarzenia cyklu życia i inne ważne wartości zwracane przez metody:
onCreateView()
onViewCreated()
onActivityCreated()
onViewStateRestored()
onStart()
onResume()
mFragment.getView() == null: false
mFragment.getActivity() == null: false
Inne ważne rzeczy do zapamiętania: Jeśli odłączysz fragment, a następnie spróbujesz dodać go ponownie za pomocą add () zamiast attach (), nic nie wydaje się zmieniać.
Jeśli spróbujesz dodać fragment, który został usunięty za pomocą metody remove () przy użyciu attach () zamiast add (), nic się nie zmienia.
Gdy getView () zwraca wartość null, fragment może nadal mieć wewnętrzne odwołania do ostatniego utworzonego widoku. Ten widok nie jest już ważny i nie powinien być używany.
Fragment
jest wolnostojący , jegoonPause
,onStop
ionDestroyView
metody są wywoływane tylko (w tej kolejności). Z drugiej strony, gdyFragment
zostanie usunięty , jegoonPause
,onStop
,onDestroyView
,onDestroy
ionDetach
metody nazywane są (w tej kolejności). Podobnie, podczas mocowania , toFragment
„sonCreateView
,onStart
ionResume
metody nazywane są tylko; a gdy dodanie , żeFragment
„aonAttach
,onCreate
,onCreateView
,onStart
ionResume
metody nazywane są (w tej kolejności).