Desarrollo Android ¿Puedo Tener Diálogos o Actividades Modales?

Desarrollo Android ¿Puedo Tener Diálogos o Actividades Modales?

Al desarrollar en ambientes de escritorio es muy común encontrar que una ventana padre invoque a una ventana hija y que espere un resultado de ésta, esto se logra sin mayor esfuerzo ya que la ejecución del código de ventana padre se detiene hasta que el usuario cierre la ventana hija.

Sin embargo los desarrolladores del sistema Android tomaron la decisión de no permitir esta forma de trabajo ya que el hilo gráfico no puede ser detenido.

En algunos sitios puedes encontrar soluciones que obligan a Android a trabajar bloqueando el hilo gráfico, para lograrlo acceden a partes privadas del API de Android, esto no es recomendable ya que pueden generar inestabilidad y comportamientos inesperados en nuestras aplicaciones, además estas soluciones pueden dejar de funcionar en cualquier momento ya que los métodos que no corresponden a la API pública pueden ser modificados o incluso desaparecer sin previo aviso.

Así que la solución correcta es adaptarnos y lograr el comportamiento deseado usando los mecanismos provistos por Android.

El caso de un Activity que llama a otro es sencillo y se basa en tres métodos:

  • startActivityForResult (Intent intent, int requestCode), es el método que debemos llamar para iniciar la actividad hija que nos va a devolver un resultado, pero la ejecución no se detendrá en esta línea a la espera de ese resultado, de modo que tendremos que obtenerlo de otra forma. El intent tiene los datos de la actividad que deseamos iniciar, y requestCode es un número que colocaremos a nuestro gusto y nos va a ayudar cuando nuestra actividad padre inicie varias hijas, a cada una le daremos un número diferente para identificarlas al momento de recibir resultados.
  • setResult (int resultCode, Intent data), es el método que llamaremos en las actividades hijas para establecer la información que vamos a devolver al padre. Generalmente resultCode toma los valores de las constantes RESULT_CANCELED, RESULT_OK aunque esto no es obligatorio, data tendrá los datos que queremos devolver.
  • onActivityResult (int requestCode, int resultCode, Intent data), es un método que se debe sobre escribir en la actividad padre para recibir los resultados. RequestCode es el número con el que identificamos la petición en el startActivityForResult, resultCode y data son los datos establecidos por setResult.

Para el caso de los Diálogos también hay varias alternativas, voy a describir la que usamos a diario, pero no es la única. Para todos los diálogos trabajamos con AlertDialog, usando setView podemos controlar totalmente lo que se muestra en el cuadro y cada AlertDialog cuenta con el método getActivity(), haciendo uso de él podemos llamar a cualquier método de la actividad padre, incluso al onActivityResult si así lo deseamos, tal cómo lo vimos en el punto anterior hacemos uso del requestCode para indicarle a la actividad padre de dónde vienen los resultados.

Cómo puedes ver no es tan complicado trabajar de esta forma y las soluciones que ofrece Android son convenientes y elegantes. Espero que está pequeña introducción te sea de utilidad y si te gustó seguro hay otros artículos en este Blog que te pueden interesar, no olvides suscribirte, darle me gusta y compartir.

Deja un Comentario

CAPTCHA code
X