Diálogos

Posted by in Android, Diálogos, Interfaz gráfica

Los dialogos en Android han evolucionado en su funcionalidad y actualmente se basan en el funcionamiento muy similar a los Fragments. De hecho los diálogos son elementos fragments con un ciclo de vida idéntico pero con algunas características que personaliza su funcionalidad. A la hora de utilizar diálogos hay que tener muy claro cual es el ciclo de vida da un DialogFragment, el cual salvo algunas excepciones que se comentarán es prácticamente idéntico al de los Fragments

Por regla general los diálogos se suelen utilizar para pedir o mostrar información al usuario de forma rápida, por lo que muchos de ellos son diseños que están reconstruidos y tan solo se tiene que personalizar el contenido de los mismos. Sin embargo también se puede hacer un dialogo con una interfaz totalmente personal así como su funcionalidad. Para empezar hay que tener claro que los cuadros de dialogo se crean en clases independientes las cuales extienden de DialogFragment donde se sobreescribirá el método OnCreateDialog para poder indicar las acciones necesarias.

 

A la hora de ser mostrado habrá que llamarlo mediante el método show, pasándole el FragmentManager y la etiqueta que se le asociará

Una vez entendido esto se explicarán los tipos de dialogo

Diálogo de confirmación

Este tipo de dialogo tan solo es un mecanismo para proporcionar una respuesta de Si/No al usuario. Para ello se utilizan los métodos setPositiveButton y setNegativeButton con sus correspondientes acciones. En este caso al igual que en el resto se sobreescribe el método onCreateDialog creando un objeto de tipo Builder encargado de construir el dialogo. Por último se devuelve

Diálogo de mensaje

Este tipo de diálogo es exactamente igual que el anterior pero tan solo con un botón que cerrará el dialogo sin dar opción a evaluar cual a sido la salida del diálogo

Diálogo de selección simple

El dialogo de selección se asocia a la selección sobre una lista de elementos de uno en concreto. Esta selección puede ser o bien de un array de datos simples (como puede ser un array de String) o un array de objetos donde se representa un dato concreto del mismo (teniendo en cuenta que este tiene que ser String). Para poder utilizar este dialogo se utiliza el método

  • setItems: donde se le pasa la colección de datos a mostrar y el evento a manejar

  • setSingleChoiceItems: donde se le pasa la colección de datos a mostrar, el elemento seleccionado y el evento a manejar. La diferencia con la opción anterior es que no desaparece el cuadro tras la selección (además de una pequeña diferencia visual

Dialogo de selección multiple

El dialogo de selección múltiple permite selección más de una opción para más adelante evaluarla. Para ello se utiliza el método setMultiChoiceItems donde se pasa como parámetro los elementos que serán mostrados, un array con los elementos que inicialmente están seleccionados y por ultimo el evento que se maneja

En los dos casos de diálogo de selección, es importante tener en cuenta que se necesitaría un botón para procesar la acción (setPositiveButton) como que no se puede utilizar el método setTitle ya que sustituiría a las opciones configuradas en los métodos setSingleChoiceItems / setMultiChoiceItem

Diálogo personalizado

En muchas ocasiones las opciones que nos da el tipo de cuadro de diálogo AlertDialog no son suficientes para la funcionalidad o interfaz gráfica que se quiere representar. Para ello se debe crear un archivo xml donde se represente la UI que se pretenda utilizar, así como asociar la misma en el método onCreateDialog mediante el método setView. Además de esto se deberán instancias todos los objetos de la interfaz que se quieran utilizar con funcionalidad lógica, siempre accediendo primero a la vista y luego al método findViewById(). Supongamos un xml que contenga la UI típica de un diálogo de login

Este archivo XML contiene tanto botones como edittext que se quieren utilizar funcionalmente en el diálogo. Para ello lo primero que se debe hacer es en la clase que extienda de DialogFragmente sobreescribir el método onAttach() (primero que se ejecuta) e inflar un objeto de tipo view con el layout correspondiente

Una vez se ha hecho esto ya puede ser “pegada” en el diálogo así como referencia cualquier elemento que este dentro del XML. En el método onCreateDialog se utilizaría el método setView() para asociarla, así como el método findViewById() para los elementos individuales

Diálogos construidos

Además del AlertDialog, existen dos tipos de dialogo que ya están creados en Android y tan solo se necesita llamarlos e implementar la interfaz que maneja los eventos de los mismos. Estos diálogos son DatePicker y TimerPicker

Diálogo de Fecha

Este diálogo muestra un calendario con una fecha indicada a partir de la cual se puede seleccionar una fecha en concreto. Su implementación puede hacerse o bien directamente como un dialogo DatePicker o bien (la forma realmente correcta) como un DialogFragment de tipo DarePicker. Para ello, al igual que en los cuadros anteriores se crea una clase que extiende DialogFragment, sobreescribiendo el método onCreateDialog, con la diferencia que ya no se devuelve un builder.create sino que se devuelve un DatePickerDialog. A este objeto hay que pasarle contexto donde será mostrado, interfaz que maneja el evento, año, mes y día mostrado en el calendario. Para que todo esto funcione la interfaz OnDateSetListener tiene que ser implementada en la clase que lance el dialogo, ya que será allí donde se maneje la fecha

En la actividad que lanza el diálogo implementando la interfaz OnDateSetListener se obliga a escribir el método onDateSet, el cual obtiene el año, mes y día del mes seleccionado en el diálogo

Diálogo de hora

Exactamente el mismo funcionamiento que el anterior, con la diferencia que en el método onCreateDialog se devolverá un objeto de tipo TimerPickerDialog al cual hay que pasarle contexto donde será mostrado, interfaz que maneja el evento, hora, minutos y si es formato 24horas.

En la actividad principal habrá que implementar la interfaz OnTimeSetListener la cual obliga a escribir el método onTimeSet el cual obtiene ls hora y minutos seleccionados del cuadro de diálogo