Android - Comment faire pour fermer Toutes les boîtes de dialogue dans onPause
J'ai une activité qui pourrait montrer les différentes boîtes de dialogue lors de l'exécution. J'utilise onCreateDialog(int id) pour créer chaque dialogue et j'utilise showDialog(int id) et dismissDialog(int id) méthode de spectacle et de rejeter chacun de dialogue respectivement.
Quand onPause() est appelé, je ne sais pas quelle boîte de dialogue (le cas échéant) est affiché. Je veux faire en sorte que lorsque onPause est appelé, tous les dialogues sont dimissed. Est-il recommandé de fermer toutes les boîtes de dialogue? Aurais-je appeler dismissDialog() pour chaque boîte de dialogue?
- J'ai mis à jour la réponse
Vous devez vous connecter pour publier un commentaire.
En fonction du nombre de la boîte de dialogue dont nous parlons. La réponse courte est oui, vous devez rejeter chaque boîte de dialogue.
Il peut être élégantes manières de le faire d'autres que de simplement avoir quelques boîtes de dialogue déclaré au niveau d'activité. Vous pouvez stocker tous les dialogues dans un HashMap une fois qu'ils sont déclarées et puis parcourir la liste et la clôture de chaque un onPause.
Car vous ne savez pas qui sont ouverts, vous aurez besoin de passer et de test de la piste ou les états.
Toutefois, si vous avez ce nombre de boîtes de dialogue sur votre écran, vous pourriez avoir quelques problèmes avec votre UI/UX design sous Android devrait vous donner un modèle qui les rend faciles à mettre en œuvre, sans que ce qui semble être une mauvaise conception.
Si vous utilisez DialogFragment et vous souhaitez rejeter tout ce que vous pouvez utiliser:
Avec android accent mis récemment sur l'utilisation de DialogFragment conteneur vous wil pas besoin de faire appel de rejeter sur chaque
Depuis les boîtes de dialogue aura un Fragment de récipient que vous pouvez simplement utiliser leur cycle de vie. Considérez ceci DialogFragment:
Qui vous sera indiqué dans votre activité à l'aide d'un fragmentmanager normalement de l'appeler comme ceci:
Noter que vous pouvez modifier ce que l'DialogFragment n'en onPause. Lorsque votre activité exige onPause, ce onPause sera trop.
Rejetant la boîte de dialogue dans onPause() à l'aide de ce.rejeter() ne seront pas faire le travail, car une fois que la reprise de l'activité, il va reprendre le dialogue en tant que bien. (Je pense que c'est parce que la savestate est stocké avant d'onPause).
Mais vous pouvez fermer la boîte de dialogue(s) dans onCreate si vous détectez une savedInstanceState (cv) comme indiqué dans le code.
J'ai une autre solution, qui pourrait être bon. Vous n'avez mis votre Dialogue Personnalisée d'ampleur à cette
SiblingDialog
, qui va s'abonner à votreDialog
à un événement de diffusion de la fermeture des boîtes de dialogue. Donc, vous pouvez envoyer l'événement de diffusion où vous voulez et toutes lesSiblingDialogs
sera fermé.Dans cet exemple, l'annuler et de révoquer boîte de dialogue méthode ont été remplacer donc le
SiblingDialog
lui-même se ferme tous les autres de la Fratrie à la clôture.