Actions dans onActivityResult et d'Erreur “ne Peut pas effectuer cette action après onSaveInstanceState”
La mise en œuvre d'une application où l'utilisateur peut se connecter, j'ai la situation suivante: Si l'utilisateur est connecté à effectuer l'action d'autre démarrer l'activité de connexion pour le résultat et, si le résultat est de l'Activité.RESULT_OK l'action.
Mon problème est que l'action à vérifier, c'est de montrer DialogFragment, mais en l'appelant
DialogFragment newFragment = MyDialogFragment.newInstance(mStackLevel);
newFragment.show(ft, "dialog")
dans le onActivityResult rappel déclenche une exception:
Caused by: java.lang.IllegalStateException:
Can not perform this action after onSaveInstanceState
Alors, comment puis-je résoudre ce problème? Je suis en train de penser à lever un drapeau là et afficher la boîte de dialogue dans le onResume mais je vois que cette solution un peu sale
Edit: Ajout de code (Im suivant cet exemple pour montrer la DialogFragment
Lorsque l'action demandée par l'utilisateur:
...
if (!user.isLogged()){
startActivityForResult(new Intent(cnt, Login.class), REQUEST_LOGIN_FOR_COMMENT);
}
Dans le même fragment
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_LOGIN_FOR_COMMENT && resultCode == Activity.RESULT_OK) {
FragmentTransaction ft = getFragmentManager().beginTransaction();
DialogFragment newFragment = MyDialogFragment.newInstance();
newFragment.show(ft, "dialog")
}
}
Et si l'utilisateur se connecte à l'activité de Connexion des appels;
setResult(Activity.RESULT_OK);
finish();
- je pense que vous devriez poster tout le code. Semble que vous essayez d'afficher la boîte de dialogue après onpause
- Édité à la question 😀
- Vérifier androiddesignpatterns.com/2013/08/... pour comprendre pourquoi ce qui se passe
Vous devez vous connecter pour publier un commentaire.
Meilleure chose que j'ai trouvé est de ne pas utiliser .show (), mais plutôt de le faire.
super.onActivityResult()
fixe pour moi, essayez ceci avant de faire la solution de contournement.Voici la solution qui fonctionne très bien pour moi.
Si vous utilisez un DialogFragment, la seule chose qui a fonctionné pour moi a été de rejeter le Fragment avec dissmissAllowingStateLoss()
J'ai simplement de vérifier si une activité est détruite.
Remplacer
show(Fragment manager, String tag)
fonction avec permettant à l'état de perdre et de changermDismissed = false;
mShownByMe = true;
de origibal fonction par la réflexion:commitAllowingStateLoss()
. De cette façon, vous n'avez pas besoin de toute réflexion.Ce de véritables œuvres.
Mais toujours mauvais, parce que a reçu l'erreur “de l'Activité a été détruit”
Donc ma solution est d'ajouter une case à
if (!isFinishing()&&!isDestroyed())
sur les rejeter:
Cette exception est levée lorsqu'un
FragmentTrasaction
s'engage aprèsFragmentManager
a sauvé son état. Le facile et propre façon est de vérifier siFragmentManager
a déjà sauvé de l'état, avant de montrer unDialogFragment
.