Rappel lors de la suppression de DialogFragment
Je veux lancer un dialogue avec une mise en page personnalisée, que j'ai mis en œuvre par l'intermédiaire d'un DialogFragment. (En gros, j'ai juste changé onCreateView() et ajouté des gestionnaires de bouton). La boîte de dialogue permet à l'utilisateur de changer rapidement d'un paramètre important.
Cette boîte de dialogue sera lancé à partir de plusieurs activités différentes. Les différentes activités n'ont pas beaucoup en commun, sauf que ils ont besoin pour se rafraîchir après modification de l'utilisateur pour le réglage. Ils n'ont pas besoin d'obtenir des informations à partir de la boîte de dialogue; ils ont simplement besoin de savoir quand il est fermé (rejeté).
Ce que j'ai Essayé de
J'ai essayé d'avoir de l'activité de l'actualisation dans onResume(), mais le lancement et la révocation d'un dialogue ne semble jamais à l'appel de cette méthode. (Donc je ne suis pas sûr de savoir pourquoi cela existe encore, mais c'est sans doute un sujet pour une autre question.)
Ensuite, j'ai essayé d'ajouter un DialogInterface.OnDismissListener à la boîte de dialogue:
public static void showMyDialog(OnDismissListener listener, Activity activity)
{
DialogFragment fragment = new MyDialogFragment();
fragment.show(activity.getFragmentManager(), "date");
activity.getFragmentManager().executePendingTransactions();//A
fragment.getDialog().setOnDismissListener(listener);//B
}
Quand j'ai d'abord à gauche de la ligne, j'ai reçu un NullPointerException sur la ligne B, parce que le dialogue est nul à ce point. Suivant les conseils de cette SORTE de réponseje l'ai mis dans l'appel à executePendingTransaction(). Cela provoque une exception IllegalStateException sur la ligne B, avec le message "OnDismissListener est déjà pris par DialogFragment et ne peut pas être remplacé." J'ai aussi essayé de mettre setOnDismissListener() avant l'appel à la méthode show(), mais qui a toujours causé une exception NullPointerException.
J'ai ensuite lu cette autre AFIN de répondre àqui dit que l'original, le demandeur était "l'appel de getDialog() trop tôt dans la DialogFragment du cycle de vie." J'ai donc essayé d'ajouter un constructeur à mon DialogFragment:
public MyDialogFragment(SomeCallback illTakeAnythingICanGet)
{
//I'll store the callback here and call it later
}
Malheureusement, l'ajout d'un constructeur fait Android Peluches freak out avec une fatale avertissement, et quand je l'ai regardé, j'ai trouvé un commentaire en cette question que semble dire cette approche, il sera impossible de traiter avec l'utilisateur, la rotation de l'écran tandis que la boîte de dialogue est ouverte.
La Question
Comment une activité figure lors d'une DialogFragment a fermé (été rejeté) de façon à ne pas briser mon application si l'utilisateur fait pivoter l'écran? Dois-je utiliser autre chose que d'un DialogFragment?
source d'informationauteur Impatient Dev
Vous devez vous connecter pour publier un commentaire.
C'est juste une plus longue explication de harism commentaire au cas où quelqu'un d'autre a le même problème je n'ai.
Vous pouvez accomplir ce que je voulais par la création d'une interface comme ceci:
De l'activité qui lance votre boîte de dialogue (DialogFragment) implémenter cette interface. Puis donner que DialogFragment la méthode suivante:
Plus explicatif code de quelqu'un pour faire la même chose.
Créer le
interface
:Implémenter l'interface de l'activité:
Écrire un
DismissListener
dansDialogFragement
commeappel
DismissListener
de votre activité:et enfin écrire
onDismiss
méthodeDe Tyler exemple était le seul exemple que j'ai pu trouver que effectivement travaillées. La seule chose qui doit changé pour l'exemple de travail est l'appel à la DismissListner méthode dans le DialogFragment classe. Il a comme:
Ce doit juste être une fonte à ce que votre nom de classe que DialogFragment est. Par exemple: