Android - Nicht in der Lage zu zerstören Aktivität nach beenden, verursacht durch IllegalStateException: Kann nicht diese Aktion durchführen, nachdem onSaveInstanceState
Habe ich eine Tätigkeit in meiner app mit 3 Fragmenten. Wenn eine Taste gedrückt wird auf die erste Methode wird aufgerufen, in der Handlung, die einige irrelevante Sachen und ruft dann finish()
.
Dies löst onPause()
auf das fragment, das nicht irrelevant Sachen und ruft dann super.onPause()
.
Die app lädt dann die alt-Aktivität kam es an (logisch nach der Ansicht stack), und plötzlich stürzt mit folgender Ausnahme, wenn onDestroyView()
wird aufgerufen, auf dem Fragment:
FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to destroy activity {be.niteowl.niteowl.debug/be.niteowl.niteowl.views.activities.VenueActivity}: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:2793)
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:2811)
at android.app.ActivityThread.access$2100(ActivityThread.java:123)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:972)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3835)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1327)
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1338)
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)
at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574)
at be.niteowl.niteowl.views.activities.TrackFragment.onDestroyView(TrackFragment.java:161)
at android.support.v4.app.Fragment.performDestroyView(Fragment.java:1665)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:980)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1070)
at android.support.v4.app.FragmentManagerImpl.dispatchDestroy(FragmentManager.java:1898)
at android.support.v4.app.FragmentActivity.onDestroy(FragmentActivity.java:324)
at com.actionbarsherlock.app.SherlockFragmentActivity.onDestroy(SherlockFragmentActivity.java:88)
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:2780)
... 11 more
Der Fehler scheint zu passieren, wenn Sie versuchen, zu entfernen MapFragment
aus dem main-Fragment. Ich weiß, dass Sie nicht haben soll Fragmente in Fragmenten, aber der code war in der Vergangenheit und es gibt keine Möglichkeit um ihn herum sowieso.
@Override
public void onDestroyView() {
SupportMapFragment f = (SupportMapFragment) activity.getSupportFragmentManager().findFragmentById(R.id.fragment_map);
if (f != null) {
activity.getSupportFragmentManager().beginTransaction().remove(f).commit();
}
super.onDestroyView();
}
Ich schaute mich um für ein Update hier auf der SO schon (vor allem erste Ausnahme "IllegalStateException: Kann nicht diese Aktion durchführen, nachdem onSaveInstanceState"), aber keiner von Ihnen waren anwendbar zu meinem aktuellen problem.
InformationsquelleAutor Vindicator | 2013-07-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da Ihre Aktivität zerstört wird, Ihre Fragmente werden automatisch zerstört werden. Daher gibt es keine Notwendigkeit für Sie, um Sie zu entfernen. Löschen Sie einfach Ihre
onDestroyView()
Methode.Ersten Fragmente in Fragmenten unterstützt über die Unterstützung von Android-Paket ist Rückportierung des fragments und dem nativen Android 4.2+ Umsetzung der Fragmente.
Zweitens, Sie tun nicht Fragmente in Fragmenten, zumindest nicht auf Basis der hier gezeigte code. Aus irgendeinem Grund, Ihr
TrackFragment
ist die Verwaltung von anderen top-level-fragment (IhrSupportMapFragment
), anstatt zu delegieren, dass die Arbeit an der Aktivität.Vielleicht öffnen Sie ein neues StackOverflow-Frage, wo können Sie zeigen, dass der gesamte stack-trace und die relevanten XML-und Java-code.
dies scheint um das Problem zu beheben: stackoverflow.com/a/17422251/732489
Das hat in der Tat gelöst! Vielen Dank für Eure Hilfe alle.
Ich danke Euch. Sie nur mich gerettet eine Menge Zeit.
InformationsquelleAutor CommonsWare
Den folgenden code für mich gearbeitet. Es ist in den fragment, das fordert die Karte fragment
f.isResumed() funktionierte bei mir auch, ich war nur mit f != null (was ich denke soll, werden in Ihrem code auch), vielen Dank!
endlich! hat es für mich auch!
InformationsquelleAutor lytridic
Begehen Transaktionen in OnPostResume() Rückruf behoben das Problem für mich. Dank folgenden Beitrag http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html
InformationsquelleAutor Varun Bhatia
Als Ihre Aktivität zerstört wird, die bewirkt, dass die Fragmente zerstört werden .commit() nicht behandelt werden kann.
Entfernen getSupportFragmentManager().beginTransaction().entfernen().commit().
Versuchen handling in der onBackPressed(), was ich für meine Anwendung
InformationsquelleAutor ranjith Gampa