java.lang.IllegalStateException(ne Peut pas effectuer cette action après onSaveInstanceState)

J'obtiens cette erreur avec le message suivant dans les différentes scénario:

  • Activité a été détruit et
  • Ne pouvez pas effectuer cette action après onSaveInstanceState

Je suis en train d'écrire une application où les Deux Activités en interaction les uns avec les Autres. Activité- lancement Activité-B à l'aide de l'Intention. Cette Activité-B classe ont deux fragment enfants. Fragment-Un utiliser la méthode publique de l'activité à lancer une autre le 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();
    }

Le Fragment B chaque fois appel finish() de tuer l'Activité-B, partant, le contrôle de revenir à Activité- de nouveau. Et même processus de répétition. Après avoir fait 2-3 fois que je reçois:

java.lang.IllegalStateException: vous ne Pouvez pas effectuer cette action après
onSaveInstanceState E/AndroidRuntime( 9008):
à
android.de soutien.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1354)
E/AndroidRuntime( 9008):
android.de soutien.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1372)

donc pour éviter cela j'ai suivi https://stackoverflow.com/a/10261438/2624806 et il a commencé à me donner

Java.lang.IllegalStateException: l'Activité a été détruit
E/AndroidRuntime( 9235):
android.de soutien.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1376)
E/AndroidRuntime( 9235):
android.de soutien.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)

toute suggestion visant à ce que je suis en manque ici.

EU j'ai eu la solution ..c'est une erreur qui se passe dans la transaction pour l'ajout de fragment. J'ai été en utilisant .ajouter au lieu d'utiliser .remplacer (comme mon obligation de ne pas maintenir la pile) et l'utilisation commitAllowTransaction à la commettre. J'ai lu http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html aussi bien et semble de ce que j'ai fait qui pourrait être coûteux, mais pour la normale fragment de transaction mentionnent le travail autour de l'excellent travail.

commitAllowingStateLoss() à commit().
Comment faites-vous appel à la finition de votre fragment? Avec getActivity().finish()?
À quel moment de l'appel à la méthode beginTransaction (...)? Fragment de Transactions & l'Activité de l'État de Perte "d'Éviter d'effectuer des transactions à l'intérieur asynchrone des méthodes de rappel."
Merci, @Mdlc @ anderson_acs je n'ai pas écrit de code explicite pour terminer Fragment Fragment d'appel public à la méthode beginTransaction() pour lancer un autre fragment, qui à remplacer le fragment. toute suggestion!
Puisque vous voulez supprimer le Fragment A et ajouter le Fragment B, vous devez utiliser FragmentTransaction.replace au lieu de FragmentTransaction.add. Essayez et laissez-moi savoir si cela est utile.

OriginalL'auteur CoDe | 2014-08-25