java.lang.IllegalStateException(Kann nicht diese Aktion durchführen, nachdem onSaveInstanceState)
Bin ich immer diesen Fehler mit folgender Meldung in verschiedenen Szenario:
- Aktivität zerstört wurde und
- Kann nicht diese Aktion durchführen, nachdem onSaveInstanceState
Ich Schreibe eine app, wo Zwei Aktivitäten miteinander interagieren. Aktivität-Ein starten Aktivität-B mit Absicht. Diese Aktivität-B Klasse haben zwei Kinder-fragment. Fragment- öffentliche Methode der activity zum starten eines anderen Fragment-B.
public void beginTransaction(ID id, Bundle bundle) {
Fragment fragment = getFragmentItem(id);
//In case this activity was started with special instructions from an Intent,
//pass the Intent's extras to the fragment as arguments
fragment.setArguments(bundle);
//Add the fragment to the 'fragment_container' FrameLayout
fragmentManager.beginTransaction()
.add(R.id.fragment_container, fragment).commitAllowingStateLoss();
}
Fragment-B jeder Zeit anrufen finish() zu töten Aktivität-B damit die Kontrolle wieder zu bewegen, Aktivität-Ein wieder. Und denselben Prozess wiederholen. Nachdem ich 2-3 mal bin ich immer:
java.lang.IllegalStateException: Kann nicht diese Aktion durchführen nach
onSaveInstanceState E/AndroidRuntime( 9008): an
android.Unterstützung.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1354)
E/AndroidRuntime( 9008):
android.Unterstützung.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1372)
so, es zu vermeiden, Folge ich https://stackoverflow.com/a/10261438/2624806 und es begann, mir zu geben
Java.lang.IllegalStateException: Aktivität zerstört wurde
E/AndroidRuntime( 9235):
android.Unterstützung.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1376)
E/AndroidRuntime( 9235):
android.Unterstützung.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)
jede Anregung, was ich hier vermisst.
HABE ES ich hab die Lösung ..es ist der Fehler passiert in der Transaktion für das hinzufügen von fragment. Ich war mit .hinzufügen stattdessen .ersetzen (meine Forderung, nicht zu pflegen stack) und verwenden commitAllowTransaction zu Begehen. Ich lese http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html als gut und scheint das, was ich haben könnte teuer sein, aber für den normalen fragment Transaktion erwähnen zu arbeiten, um große Arbeit.
commitAllowingStateLoss()
zu commit()
.Wie nennst du fertig von Ihrem fragment? Mit getActivity().finish()?
Was Aufruf der Methode beginTransaction (...)? Fragment-Transaktionen & Aktivitäts-Status-Verlust "Vermeiden Sie die Durchführung von Transaktionen innerhalb von asynchronen callback-Methoden."
Danke, @Mdlc @ anderson_acs ich nicht schreiben expliziten code zu beenden Fragment, Fragment Aufruf der öffentlichen Methode beginTransaction() zu starten, ein weiteres fragment, das ersetzen der vorhandenen fragment. jede Anregung!
Da Sie entfernen möchten, Fragment-und add Fragment-B, die Sie verwenden müssen
FragmentTransaction.replace
statt FragmentTransaction.add
. Versuchen Sie, und lassen Sie mich wissen, ob es hilft.InformationsquelleAutor CoDe | 2014-08-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als ich kann nicht kommentieren auf Ihre Frage aufgrund zu weniger Ruf-Punkt.
Ich nehme an, dies ist Ihre öffentliche Methode zu ändern, fragment.
In dieser Methode jedes mal, wenn Sie hinzufügen-fragment-Aktivität. Also, wenn Sie hinzufügen, fragment ersten mal das funktioniert gut, aber im Falle eines zweiten fragment sollten Sie nutzen, ersetzen nicht hinzufügen
Ich denke, danach sollte man nicht vor diesem problem. oder können Sie 'ersetzen' für die beiden ersten und zweiten fragment.
Ich hoffe, dies wird Ihnen helfen.
InformationsquelleAutor Subham