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
Vous devez vous connecter pour publier un commentaire.
Que je ne peux pas commenter sur votre question en raison de moins de point de réputation.
Je suppose que c'est votre méthode publique pour modifier le fragment.
Dans cette méthode, chaque fois que vous ajoutez fragment d'activité. Donc, si vous ajoutez fragment première fois que ce sera bon travail, mais, en cas de second fragment que vous devez utiliser remplacez pas ajouter
Je pense que après avoir fait cela, vous ne devriez pas faire face à ce problème. ou vous pouvez utiliser l'option "remplacer" pour le premier et le deuxième fragment.
J'espère que cela va vous aider.
OriginalL'auteur Subham