FragmentManager NullPointerException beim Versuch, commitAllowingStateLoss

8

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.

%Vor%

Stapelverfolgung:

%Vor%     
Bogdan Zurac 11.02.2013, 10:23
quelle

2 Antworten

9

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.

    
Steven Byle 12.02.2013, 14:20
quelle
1

Die NullPointerException wird von der Tatsache verursacht, dass der Handler der Aktivität vom FragmentManager aus deaktiviert ist. Daher ist eine "Lösung", die den Absturz verhindert:

%Vor%     
Gorbas 09.07.2015 09:34
quelle