37 votes

Dialog.show () vs. Activity.showDialog ()

Aussi loin que je peux dire, il y a deux moyens pour afficher une boîte de Dialogue à partir d'une Activité.

  1. Créer la boîte de Dialogue (par exemple, à l'aide d'un AlertDialog.Builder), puis d'appeler la fonction nouvellement créée de la boîte de Dialogue show() méthode.
  2. Appel de l'Activité, en showDialog() méthode, en passant dans un int qui fait la particularité de ce genre de Dialogue que vous voulez construire. Ensuite remplacer l' onCreateDialog() de réellement construire le Dialogue, et Android affichera pour vous.

La seconde méthode semble être la norme, mais je suis curieux de savoir si il n'y a aucune raison que cela fait une différence que j'utilise. Voici tout ce que je peux venir avec:

Raisons de l'utilisation d' Dialog.show

  1. Si vous avez besoin de paramétrer la boîte de Dialogue d'une certaine façon, il peut être un peu difficile à utiliser Activity.showDialog, comme décrit dans cette question. Vous pourriez avoir à stocker une Chaîne ou quelque chose dans une variable membre, juste pour qu'il puisse être récupéré quelques instants plus tard, lors d' onCreateDialog ou onPrepareDialog.
  2. La logique de la création et de la modification de la boîte de dialogue est répartie sur un certain nombre d'endroits, ce qui pourrait le rendre le code plus difficile à lire et à maintenir:
    • L'endroit où vous vous appelez showDialog()
    • À l'intérieur d'un large switch énoncé dans le substituée onCreateDialog méthode
    • À l'intérieur d'un large switch énoncé dans le substituée onPrepareDialog méthode

Raisons de l'utilisation d' Activity.showDialog:

  1. L'API docs pour Activity.showDialog - dire que le Dialogue est "géré" par l'Activité qui, je suppose, offre certains avantages? Mais cela est également vrai si vous utilisez l' AlertDialog.Builder, je pense, parce que vous passez en this en argument du Constructeur constructeur.
  2. Si votre Activité est va vous montrer le même (ou très similaire) Dialogue à plusieurs reprises, cette option crée qu'une seule fois, au lieu d'en créer un nouveau à chaque fois, ainsi, de mettre moins de pression sur le système de mesure d'allouer de l'espace pour de nouveaux objets, de la collecte des ordures, etc.

Donc ma question est, quels sont les critères pour décider quand utiliser Activity.showDialog et quand utiliser Dialog.show, et pourquoi?

18voto

DariuszB Points 2427

À mon avis, vous devriez préférer showDialog car cette méthode fera le gros du travail pour vous. Par exemple, vous n'avez pas à craindre de perdre la référence à votre boîte de dialogue après avoir modifié l'orientation de l'écran. Il sera recréé automatiquement. Dialog.show est beaucoup plus sujet aux erreurs.

Je vous suggère donc d'utiliser showDialog partout où vous le pouvez.

2voto

Cristian Points 92147

Je pense que la décision vous appartient, en fonction des bonnes raisons que vous avez indiquées. Si j'ai une activité qui ne contient qu'un seul dialogue (par exemple, pour afficher une alerte), je déclencherais simplement la méthode Dialog.show ... Par contre, si l'interface utilisateur de mon application repose trop sur sa fonctionnalité sur l'utilisation des dialogues, il serait bien mieux d'utiliser showDialog() . Je pense que le meilleur avantage de l'utilisation de showDialog() est qu'il est plus facile à lire:

 final int ERROR_DIALOG = 404;
final int MSG_DIALOG = 200;

.....

// if someone else read this, he/she will immediately understand what's going on
showDialog( ERROR_DIALOG );
 

2voto

Dheeraj V.S. Points 6384

Vous pouvez utiliser la méthode surchargée showDialog(int, Bundle) introduit dans l'API de niveau 8.
Simple d'enfoncer le message à afficher dans le bundle, qui sera disponible en onPrepareDialog(int, Dialog, Bundle).

Oui, je sais qu' showDialog() lui-même a été rendu obsolète maintenant.

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