2016-07-21 5 views
1

Ich habe 2 Aktivitäten, A und B. Aktivität A besteht aus einem Fragment. Für die Benachrichtigung klicken, verwende ich TaskStackBuilder, Aufruf nextIntent als B, die parentActivity als A. Für die nextIntent, setze ich Intent.FLAG_ACTIVITY_NEW_TASK Flag.fragment.commit() gibt illegalStateException, kann nach onSaveInstanceState nicht ausgeführt werden

Das Szenario ist, B-Aktivität steht im Vordergrund, Benachrichtigung kommt an und Sie klicken darauf, Aktivität A wird zerstört, Aktivität B wird von onCreate geladen. Wenn ich zurückgehe, wird Activity A's onCreate geladen, aber für den Fragment-Commit-Aufruf bekomme ich den folgenden Crash.

Fatal Exception: java.lang.IllegalStateException: Kann diese Aktion nach onSaveInstanceState bei android.support.v4.app.FragmentManagerImpl.checkStateLoss (FragmentManager.java:1493) bei android.support.v4 nicht ausführen .app.FragmentManagerImpl.enqueueAction (FragmentManager.java:1511) bei android.support.v4.app.BackStackRecord.commitInternal (BackStackRecord.java:638) bei android.support.v4.app.BackStackRecord.commit (BackStackRecord.java : 617)

Hier ist, wie ich den frag Commit bin ment

EgFragment fragment = new EgFragment(); 
    getSupportFragmentManager().beginTransaction().add(R.id.view, fragment).commit(); 

Jede Hilfe dieses Szenario zu überwinden .....

+0

Zeigen Sie bitte den Code an. Meinst Du "FragmentTransaction.commit" und nicht "fragment.commit"? :) – Vucko

+0

Ich habe die Frage mit dem Commit-Code bearbeitet – madhu

+0

Versuchen Sie, Ihre Fragmenttransaktion zu begehen, die Statusverlust erlaubt – Eenvincible

Antwort

0

ich das Problem gefunden werden. Im FragmentManager gibt es zwei boolesche Methoden, mStateSaved und mDestroyed. In onStop wird mSavedState auf True festgelegt. In OnDestroy wird mDestroyed auf true gesetzt, aber mStateSaved wird nicht auf false gesetzt.

Wenn Aktivität B jetzt aus Aktivität A gestartet wird, setzt A onStop mStateSaved auf true. In B, wenn ein Benachrichtigungsklick mit FLAG_ACTIVITY_NEW_TASK auftritt. Beide Aktivitäten onDestroy werden aufgerufen. Jetzt wird der onCreate aufgerufen, der mStateSaved als false deklariert. Wenn wir jedoch getSupportFragmentManager verwenden und das Fragment festschreiben, wird mStateSaved wahr.

Ich denke, getSupportFragmentManager() gibt vorherige Instanz Manager wo mStateSaved war wahr.

Jetzt weiß ich nicht, wie ich das lösen soll.