9 votes

IllegalStateException lors de l'utilisation de DialogFragment

Je viens de commencer à utiliser DialogFragment à partir de la bibliothèque de support Android et je le trouve extrêmement ennuyeux jusqu'à présent. J'ai quelques AsyncTasks personnalisés qui sont appelés à différents endroits dans mon application. Il y a deux occasions où je rencontre des problèmes avec les DialogFragment :

  1. Lorsque vous déboguez et que l'écran s'éteint
  2. Lorsque je veux ouvrir un FragmentDialog à partir de onActivityResult()

Les deux, du moins je le pense, sont des situations assez courantes, et dans les deux cas, j'obtiens un

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState

C'est ainsi que mes AsyncTasks sont structurées :

private class UploadImageAsyncTask extends AsyncTask<Void, Void, Image> {
    private ProgressDialogFragment dialog;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        FragmentManager fm = getSupportFragmentManager();
        dialog = new ProgressDialogFragment();
        dialog.show(fm, "ProgressDialogFragment");
    }

    @Override
    protected Image doInBackground(Void... params) {
        ...
    }

    @Override
    protected void onPostExecute(Image result) {
        super.onPostExecute(result);
        dialog.dismiss();

        ...
        }
    }
}

Je sais que je pourrais définir un paramètre qui empêche l'écran de se mettre en veille pendant le débogage et que je pourrais définir un drapeau dans onActivityResult(), puis ouvrir la boîte de dialogue dans onStart(), mais ce n'est pas vraiment ce que je recherche. Existe-t-il de meilleures solutions ?

Merci Simon

5voto

Enes Points 598

Utilice dialog.dismissAllowingStateLoss(); au lieu de dialog.dismiss();

1voto

MarvinLabs Points 13401

Vous avez une réponse à cette autre question : Afficher le segment de dialogue de onActivityResult

En gros, un bogue dans la bibliothèque de compatibilité .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X