2010-07-03 5 views
37

Por lo que puedo decir, hay dos formas de mostrar un cuadro de diálogo de una actividad.Dialog.show() vs. Activity.showDialog()

  1. creado el diálogo (por ejemplo, usando un AlertDialog.Builder), y luego llamar al método del diálogo recién creado show().
  2. Llame al método showDialog() de Activity, pasando un int que define de forma única qué tipo de cuadro de diálogo desea construir. Luego, anule onCreateDialog() para que realmente cree el cuadro de diálogo, y Android lo mostrará por usted.

El segundo método parece ser la práctica estándar, pero tengo curiosidad si hay alguna razón por la que importe cuál utilizo. Aquí es todo lo que puedo llegar a:

razones para utilizar Dialog.show

  1. Si tiene que parametrizar el diálogo de alguna manera, puede ser un poco incómodo de usar Activity.showDialog, como se describe en this question. Puede que tenga que almacenar un String o algo en una variable miembro, solo para que pueda recuperarse momentos más tarde durante onCreateDialog o onPrepareDialog.
  2. La lógica para crear y modificar el cuadro de diálogo se extiende a través de una serie de lugares, lo que podría hacer que el código sea más difícil de leer y mantener:
    • El lugar donde se llama a showDialog()
    • Dentro de una potencialmente grande switch declaración en el sobrescrito onCreateDialog método
    • Dentro de una potencialmente grande switch declaración en el método reemplazado onPrepareDialog

razones para utilizar Activity.showDialog:

  1. La API Docs para Activity.showDialog dicen que el diálogo es "administrada" por la actividad que supongo que proporciona algún beneficio? Pero esto también es cierto si usa el AlertDialog.Builder, creo, porque pasa this como argumento al constructor del constructor.
  2. Si su actividad va a mostrar el mismo diálogo (o uno muy similar) varias veces, esta opción lo crea solo una vez, en lugar de crear uno nuevo cada vez, lo que ejerce menos presión sobre el sistema en cuanto a asignación de espacio para los nuevos objetos, recolección de basura, etc.

Así que mi pregunta es, ¿cuáles son los criterios para decidir cuándo utilizar Activity.showDialog y cuándo usar Dialog.show, y por qué?

Respuesta

18

En mi opinión se debe preferir showDialog ya que este método va a hacer la mayor parte del trabajo por usted. Por ejemplo, no tiene que preocuparse de perder la referencia a su diálogo después de cambiar la orientación de la pantalla. Se recreará automáticamente. Dialog.show es mucho más propenso a errores.

Así que le sugiero que use showDialog donde sea que pueda.

+1

Hay una explicación técnica detallada de por qué elegimos Activity.showDialog en lugar de Dialog.show. http://www.dreamincode.net/forums/topic/233010-dialogs-and-the-android-lifecycle/ Yup. En su mayoría, trato relacionado con la orientación de la pantalla. –

+1

Solo un punto a tener en cuenta aquí: 'onCreateDialog()' solo se llama una vez cuando primero se necesita crear el cuadro de diálogo y aquí es donde inicialmente se configura el contenido del diálogo. Si necesita actualizar su contenido, debe usar el método 'onPrepareDialog()', que se llama justo antes de que se muestre el cuadro de diálogo, lo que le permite actualizar sus contenidos adecuadamente. – Caumons

2

Creo que la decisión depende de usted, dependiendo de las buenas razones que ha señalado. Si tengo una actividad que tiene solo un diálogo (por ejemplo, para mostrar una alerta), simplemente activaría el método Dialog.show ... por otro lado, si la interfaz de usuario de mi aplicación depende demasiado de su funcionalidad en el uso de diálogos sería mucho mejor usar showDialog().Creo que la mejor ventaja de utilizar showDialog() es que es más fácil de leer:

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); 
Cuestiones relacionadas