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 :
- Lorsque vous déboguez et que l'écran s'éteint
- 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