Android - Impossible de détruire l'activité après l'arrivée, causée par l'exception IllegalStateException: vous ne Pouvez pas effectuer cette action après onSaveInstanceState
J'ai une activité dans mon application avec les 3 fragments. Quand un bouton est poussé sur le premier, une méthode est appelée dans l'Activité qui fait de la pertinence des trucs et puis les appels finish()
.
Ce qui déclenche la onPause()
sur le fragment, qui n'a plus de pertinence trucs et puis les appels super.onPause()
.
L'application des charges de l'Activité ancienne et elle s'est (logiquement la suite de l'affichage de la pile), et tout à coup se bloque avec l'exception suivante lorsque onDestroyView()
est appelée sur le 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
L'erreur semble se produire lorsque vous essayez de supprimer un MapFragment
de la principale Fragment. Je sais que vous n'êtes pas censé avoir des fragments dans des fragments, mais le code a fonctionné dans le passé et il n'y a pas moyen de contourner cela de toute façon.
@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();
}
J'ai regardé autour pour un correctif, ici, sur la DONC déjà (notamment l'obtention de "l'exception IllegalStateException: vous ne Pouvez pas effectuer cette action après onSaveInstanceState"), mais aucun d'entre eux étaient applicables à mon problème actuel.
OriginalL'auteur Vindicator | 2013-07-17
Vous devez vous connecter pour publier un commentaire.
Depuis votre activité est en train d'être détruit, vos fragments seront automatiquement détruits. Par conséquent, il n'est pas nécessaire pour vous de les supprimer. Il suffit de supprimer votre
onDestroyView()
méthode.Tout d'abord, les fragments à l'intérieur des fragments sont pris en charge par le Soutien Android package de rétroportage des fragments et de la native Android 4.2+ mise en œuvre de fragments.
Deuxième, vous ne faites pas des fragments dans des fragments, au moins pas basé sur le code présenté ici. Pour une raison quelconque, votre
TrackFragment
est la gestion d'une autre de niveau supérieur fragment (votreSupportMapFragment
), plutôt que de déléguer ce travail à l'activité.Peut-être ouvrir un nouveau StackOverflow question, où vous pouvez montrer à l'ensemble de la trace de la pile et le XML et le code Java.
cela semble résoudre le problème: stackoverflow.com/a/17422251/732489
Qui a en effet résolu! Merci beaucoup pour votre aide à tous.
Je vous en remercie. Vous juste m'a sauvé beaucoup de temps.
OriginalL'auteur CommonsWare
Le code suivant a travaillé pour moi. Il est placé dans le fragment qui appelle le fragment de carte
f.isResumed() a fonctionné pour moi aussi, j'ai été tout simplement à l'aide de f != null (qui je pense devrait être dans votre code), merci beaucoup!
enfin!!! il l'a fait pour moi aussi!
OriginalL'auteur lytridic
De validation des transactions dans OnPostResume() rappel résolu le problème pour moi. Grâce à notre blog http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html
OriginalL'auteur Varun Bhatia
Que votre activité est détruite, ce qui provoque les fragments être détruite .commit() ne peut pas être traitée.
Supprimer getSupportFragmentManager().beginTransaction().supprimer().commit().
Essayer de manutention dans onBackPressed(), que j'ai fait pour mon application
OriginalL'auteur ranjith Gampa