Ne pouvez pas effectuer cette action après onSaveInstanceState - DialogFragment
J'ai remplacé le onSavedInstanceState et enlevé le super, je ne le fais pas pour toutes les transactions et, a fortiori, les transactions dans les fonctions volatiles ou asynchrone.
Je l'appelle dans une fonction de rappel personnalisée 'onUserExistsListener'
@Override
public Boolean userExists(Boolean exists) {
if (exists) {
}
else
{
AlertDialogFragment Frag = AlertDialogFragment.newInstance(0, null);
Frag.show(getSupportFragmentManager(), "warndialog");
}
};
Avoir essayé tout ce qui est suggéré dans l'autre des questions et toujours pas trouvé de solution? Quelqu'un?
code:
AlertDialogFragment Frag = AlertDialogFragment.newInstance(0, null);
Frag.show(getSupportFragmentManager(), "warndialog");
Le processus:
OnCreate: (LoadNames fonction)
LoadNames de Rappel -> Afficher la boîte de dialogue.
Plus loin:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
add_name_to_db();
}
fonction:
public void add_name_to_db() {
Details.checkNameExists(user_txt.getText().toString());
Details.setOnUserExistsListener(new onUserExistsListener() {
@Override
public Boolean userExists(Boolean exists) {
if (exists)
{
} else {
runOnUiThread(new Runnable() {
@Override
public void run() {
AlertDialogFragment Frag = AlertDialogFragment.newInstance(0, null);
Frag.show(getSupportFragmentManager(), "warndialog");
}
});
}
} else {
Toast.makeText(getApplicationContext(), "This is not a valid KIK username",
Toast.LENGTH_SHORT).show();
}
return exists;
}
});
}
Pouvez-vous préciser votre question plus?
N'êtes-vous pas appel à super.onCreate()? Vous avez à faire.
La question n'est pas très clair, vous devez montrer où en êtes-vous en appelant
Code ajouté! Il doit avoir à faire avec le retour d'appel en quelque sorte, je ne peux pas comprendre pourquoi.
Êtes-vous d'obtenir une stacktrace dans le journal, est-il s'écraser? Si donc les modifier à votre question... 🙂
N'êtes-vous pas appel à super.onCreate()? Vous avez à faire.
La question n'est pas très clair, vous devez montrer où en êtes-vous en appelant
onUserExistsListener
. Aussi, vous n'avez pas besoin de remplacer onSavedInstanceState
. Peut-être que ce blog peut vous aider à mieux comprendre pourquoi cette Exception se produit et comment l'éviter -> androiddesignpatterns.com/2013/08/...Code ajouté! Il doit avoir à faire avec le retour d'appel en quelque sorte, je ne peux pas comprendre pourquoi.
Êtes-vous d'obtenir une stacktrace dans le journal, est-il s'écraser? Si donc les modifier à votre question... 🙂
OriginalL'auteur Broak | 2014-01-22
Vous devez vous connecter pour publier un commentaire.
En appelant
Frag.show(getSupportFragmentManager(), "warndialog");
, vous êtes en fait effectuer un fragment de transaction (voir show()).Si l'activité est onSaveInstanceState() la méthode a été appelée, une IllegalStateException sera générée lorsque vous essayez d'afficher la boîte de dialogue. Vous devez modifier votre code pour vous assurer que lorsque vous affichez la boîte de dialogue fragment, vous faire à l'issue de l'activité de l'état a été restaurée (c'est à dire, onPostResume()). Voir ce post de blog pour plus d'informations.
Vous pouvez également valider la transaction permettant à l'état la perte de;
Si l'activité a été détruit, alors vous ne pouvez pas joindre un fragment.Soit, le changement régulier de dialogue ou de vous assurer d'engager avec l'activité vivante et lorsque l'activité de l'état, a été restaurée.
J'ai fait une solution de rechange à DialogFragment, qui peuvent éviter cette exception : github.com/AndroidDeveloperLB/DialogShard
OriginalL'auteur Luis
EDIT: Vous devez appeler le super.onCreate(SavedInstanceState) dans onCreate(). Il ne va pas fonctionner sans elle.
onSaveInstanceState() se produit lorsque l'activité est la finition. Il est trop tard pour s'arrêter et afficher l'INTERFACE utilisateur.
Quand voulez-vous que ce code fonctionne? Lorsque le bouton de retour est pressé, peut-être?
Mettre votre code dans onBackPressed() pour cela.
Android: la Bonne Façon d'utiliser onBackPressed() avec du pain grillé
MODIFIER Si vous voulez le code à exécuter au début d'une activité, comme vous l'avez mentionné dans un autre commentaire. N'utilisez pas de onSaveInstanceState(). Mettre votre code dans onCreate() ou onResume().
Vous devez appeler la super.onCreate(SavedInstanceState) dans onCreate(). Il ne va pas fonctionner sans elle.
Je suis déjà en train de le faire. Désolé si je suis en train de vous confondre certains comment? Tous ont un autre regard sur elle maintenant, et voir si je peux faire la lumière sur elle avec un esprit frais.
OriginalL'auteur MikeHelland
Selon comment votre rappel est de travail, vous devrez peut-être exécuter les lignes de code sur le Thread d'INTERFACE utilisateur, comme ceci:
OriginalL'auteur MikeHelland