Vérifier si l'état est enregistré avant de commettre un FragmentTransaction

Je vois parfois les suivantes stacktrace pour une livraison qui peuvent se produire lorsque l'utilisateur n'est pas à la recherche à l'activité (après enregistrement):

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)

En regardant la source Android, c'est tout à fait logique:

private void checkStateLoss() {
        if (mStateSaved) {
            throw new IllegalStateException(
                    "Can not perform this action after onSaveInstanceState");
        }
        if (mNoTransactionsBecause != null) {
            throw new IllegalStateException(
                    "Can not perform this action inside of " + mNoTransactionsBecause);
        }
 }

Maintenant, je me demande si il n'y a aucune façon (en plus de stocker une variable de classe dans sur(Enregistrer/Restaurer)InstanceState) pour vérifier si un fragment est ou va être engagé dans un état indésirable, de cette façon, je peux stocker la transaction pour plus tard et faire la livraison en temps opportun.

  • Êtes-vous essayer d'exécuter un FragmentTransaction de onNewIntent méthode?
  • Éventuellement? Quelle différence cela fait-il?
  • J'ai connu le même problème aujourd'hui et la raison en est que j'ai essayé d'ajouter un nouveau fragment de onNewIntent lorsque l'activité n'a pas repris encore.
InformationsquelleAutor hwrdprkns | 2013-02-13