Kontext: Ich habe ein Activity
mit einem Fragment
und 3 InnerFragments
. Wenn der Fragment
onDestroy()
aufgerufen wird, möchte ich die inneren Fragmente aus dem FragmentManager
entfernen. Der Code von onDestroy()
ist unter.
Problem: FragmentManager
throws NullPointerException
, wahrscheinlich wenn commitAllowingStateLoss()
aufgerufen wird. Ich verstehe nicht warum.
Stapelverfolgung:
%Vor% Die FragmentManager
verwaltet alle Fragments
auf der Ebene Activity
, und ihr Lebenszyklus wird an diese übergeordnete Datei Activity
gebunden. Der untergeordnete Fragment
-Manager verwaltet alle Fragments
auf der Ebene Fragment
, und ihr Lebenszyklus wird an diesen übergeordneten Fragment
gebunden.
Fügen Sie also für Ihre Telefonarchitektur Ihre InnerFragment
zu Ihrer Activity
hinzu, indem Sie getFragmentManager()
verwenden. Wenn die Activity
für immer zerstört wird (über den Zurück-Button / finish()
), wird FragmentManager
den InnerFragment
für dich zerstören und freigeben.
Fügen Sie für Ihre Tablet-Architektur Ihre InnerFragments
zu Ihrer Fragment
hinzu, indem Sie getChildFragmentManager()
(in der neuesten Support-Bibliothek) verwenden. Wenn Fragment
für immer zerstört, wird FragmentManager
den InnerFragments
für dich zerstören und freigeben.
Du solltest es nicht schaffen, dein Fragments
selbst zu veröffentlichen und zu zerstören. Ich würde empfehlen, die Lebenszyklusereignisse von Activities
und Fragments
zu protokollieren, damit Sie sehen können, wie sie ihre Status durchlaufen und korrektes Verhalten sicherstellen.
Tags und Links android android-fragments android-fragmentactivity