Die Benennung der Fragmentverwaltungsmethoden ist selbst laut Google-Ingenieuren in Message Boards sehr verwirrend (siehe Kommentare oben). Ich habe mir eine kleine Demo gemacht, um herauszufinden, wie die Dinge tatsächlich funktionieren. Hier sind meine Ergebnisse. Fühlen Sie sich frei, mich zu korrigieren, wenn ich falsch liege.
Um einer Aktivität zunächst ein Fragment hinzuzufügen, verwenden Sie: getFragmentManager (). BeginTransaction (). Add (R.id.container, mFragment) .commit ().
Dadurch wird die Aktivität dem Fragment zugeordnet und dem Fragment wird auch eine Ansicht zugeordnet.
Hier sind die resultierenden Lebenszyklusereignisse und andere wichtige Methodenrückgabewerte:
onAttach()
onCreate()
onCreateView()
onViewCreated()
onActivityCreated()
onViewStateRestored()
onStart()
onResume()
mFragment.getView() == null: false
mFragment.getActivity() == null: false
Um ein Fragment aus einer Aktivität zu entfernen, verwenden Sie: getFragmentManager (). BeginTransaction (). Remove (mFragment) .commit ().
Dadurch wird jegliche Zuordnung zu einer Ansicht oder zu einer Aktivität entfernt.
Hier sind die resultierenden Lebenszyklusereignisse und andere wichtige Methodenrückgabewerte:
onPause()
onStop()
onDestroyView()
onDestroy()
onDetach()
mFragment.getView() == null: true
mFragment.getActivity() == null: true
Ich habe das Fragment hier erneut hinzugefügt
Um ein hinzugefügtes Fragment von einer Aktivität zu trennen, verwenden Sie: getFragmentManager (). BeginTransaction (). Detach (mFragment) .commit ().
Dadurch wird jede Zuordnung zu einer Ansicht entfernt, die Zuordnung zur Aktivität bleibt jedoch erhalten.
Hier sind die resultierenden Lebenszyklusereignisse und andere wichtige Methodenrückgabewerte:
onPause()
onStop()
onDestroyView()
mFragment.getView() == null: true
mFragment.getActivity() == null: false
Um ein Fragment, das von der Aktivität getrennt wurde, erneut anzuhängen, verwenden Sie: getFragmentManager (). BeginTransaction (). Attach (mFragment) .commit ().
Dadurch wird eine neue Ansicht erstellt, die dem Fragment zugeordnet werden soll, und die Aktivitätszuordnung wird beibehalten.
Hier sind die resultierenden Lebenszyklusereignisse und andere wichtige Methodenrückgabewerte:
onCreateView()
onViewCreated()
onActivityCreated()
onViewStateRestored()
onStart()
onResume()
mFragment.getView() == null: false
mFragment.getActivity() == null: false
Andere wichtige Dinge, die Sie beachten sollten: Wenn Sie ein Fragment trennen und dann versuchen, es erneut mit add () anstatt mit attach () hinzuzufügen, scheint sich nichts zu ändern.
Wenn Sie versuchen, ein Fragment hinzuzufügen, das mit remove () entfernt wurde, indem Sie attach () anstelle von add () verwenden, scheint sich nichts zu ändern.
Wenn getView () null zurückgibt, enthält das Fragment möglicherweise noch interne Verweise auf die zuletzt erstellte Ansicht. Diese Ansicht ist nicht mehr gültig und sollte nicht verwendet werden.
Fragment
ist freistehend , seineonPause
,onStop
undonDestroyView
Methoden nur genannt werden (in dieser Reihenfolge). Auf der anderen Seite, wenn einFragment
sich entfernt , seinonPause
,onStop
,onDestroyView
,onDestroy
undonDetach
Methoden aufgerufen werden (in dieser Reihenfolge). Wenn in ähnlicher Weise angebracht , dieFragment
‚sonCreateView
,onStart
undonResume
Methoden nur aufgerufen werden; und wenn das Hinzufügen , dieFragment
‚sonAttach
,onCreate
,onCreateView
,onStart
undonResume
Methoden aufgerufen (in dieser Reihenfolge).