Dialog.show () vs. Activity.showDialog ()
Por lo que puedo decir, hay dos maneras de mostrar un diálogo de una actividad.
- Cree el
AlertDialog.Builder
diálogo (por ejemplo, utilizando unAlertDialog.Builder
) y, a continuación, llame al métodoshow()
AlertDialog.Builder
diálogo recién creado. - Llame al método
showDialog()
, pasando un int que define de forma única qué tipo de diálogo desea crear. A continuación, anuleonCreateDialog()
para crear elonCreateDialog()
diálogo, y Android lo mostrará para usted.
El segundo método parece ser la práctica estándar, pero estoy curioso si hay alguna razón que importa que uno uso. Aquí está todo lo que puedo imaginar:
- No puedo mostrar la lista en un diálogo con setMultiChoiceItems en Android
- ¿Descartar un diálogo personalizado?
- Android muestra otro diálogo desde un diálogo
- Se desactiva el cuadro de diálogo personalizado cuando hago clic fuera de él
- Callback cuando se desactiva DialogFragment
Razones para usar Dialog.show
- Si necesita parametrizar el Diálogo de alguna manera, puede ser un poco incómodo usar
Activity.showDialog
, como se describe en esta pregunta . Puede que tenga que almacenar una cadena o algo en una variable miembro, sólo para que pueda recuperarse momentos más tarde duranteonCreateDialog
oonPrepareDialog
. - La lógica para crear y modificar el diálogo se extiende a través de una serie de lugares, potencialmente haciendo que el código sea más difícil de leer y mantener:
- El lugar donde se llama
showDialog()
- Dentro de una sentencia
switch
potencialmente grande en el métodoonCreateDialog
sobreescrito - Dentro de una sentencia de
switch
potencialmente grande en el métodoonPrepareDialog
sobreescrito
- El lugar donde se llama
Razones para utilizar Activity.showDialog
:
- Los documentos de API para
Activity.showDialog
dicen que el Diálogo es "administrado" por la Actividad que supongo proporciona algún beneficio? Pero esto también es cierto si usas elAlertDialog.Builder
, creo, porque pasas enthis
como un argumento al constructor del constructor. - Si su actividad va a mostrar el mismo (o un cuadro de diálogo muy similar) varias veces, esta opción lo crea una sola vez, en lugar de crear una nueva cada vez, poniendo así menos tensión en el sistema en cuanto a asignar espacio para objetos nuevos , Recolección de basura, etc.
Así que mi pregunta es, ¿cuáles son los criterios para decidir cuándo usar Activity.showDialog
y cuándo usar Dialog.show
, y por qué?
- El cuadro de diálogo no muestra el botón positivo y negativo
- El diálogo de Android se descarta en el segundo clic. ¿Por qué?
- Diálogo de selección de elección única en android
- Cuadro de diálogo con EditText y Spinner
- Cómo obtener datos de un cuadro de diálogo personalizado
- Onclick Listener para el botón Aceptar
- Android no puede obtener el tamaño de archivo de diálogo
- ¿Cómo puedo cambiar el color negro predeterminado "color" (no la cantidad de oscuridad) de Dialog?
En mi opinión usted debe preferir showDialog
porque este método hará la mayor parte del trabajo para usted. En ejemplo, no tiene que preocuparse de que 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 te sugiero que utilices showDialog
donde puedas.
Creo que la decisión depende de usted, dependiendo de las buenas razones que ha señalado. Si tengo una actividad que tiene sólo un cuadro de diálogo (por ejemplo, para mostrar una alerta) acabo de despedir 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 usar 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 );
Puede utilizar el método sobrecargado showDialog(int, Bundle)
introducido en el nivel 8 de la API.
Simplemente empuje el mensaje que se mostrará en el paquete, que estará disponible en onPrepareDialog(int, Dialog, Bundle)
.
Sí, sé que showDialog()
se ha desaprobado ahora.