Android – Cómo descartar todos los cuadros de diálogo en onPause

Tengo una actividad que podría mostrar diálogos diferentes durante run-time. Utilizo onCreateDialog (int id) para crear cada cuadro de diálogo y utilizo showDialog (int id) y dismissDialog (int id) método mostrar y descartar cada cuadro de diálogo, respectivamente.

Cuando onPause () se llama, no sé qué diálogo (si lo hay) se muestra. Quiero asegurarme de que cuando onPause se llama, todos los diálogos son dimissed. ¿Hay una forma recomendada de descartar todos los diálogos? ¿Tendría que llamar a dismissDialog () para cada diálogo?

Dependiendo de cuántos diálogos estamos hablando. La respuesta corta es sí, tendrá que descartar cada diálogo.

Puede haber formas elegantes de hacer esto aparte de simplemente tener algunos diálogos declarados en el nivel de actividad. Puede almacenar todos los cuadros de diálogo en un HashMap una vez que se declaran y luego iterar a través de la lista y cerrar cada uno onPause.

Puesto que usted no sabe cuáles están abiertos usted necesitará pasar a través y probar o seguir los estados.

Sin embargo, si realmente tiene muchos diálogos en la pantalla, es posible que tenga algunos problemas con su diseño UI / UX, ya que Android debería proporcionarle un modelo que facilite su implementación sin lo que parece un diseño deficiente.

Si está utilizando DialogFragment y desea descartar todo lo que puede utilizar:

/** * Dismiss all DialogFragments added to given FragmentManager and child fragments */ public static void dismissAllDialogs(FragmentManager manager) { List<Fragment> fragments = manager.getFragments(); if (fragments == null) return; for (Fragment fragment : fragments) { if (fragment instanceof DialogFragment) { DialogFragment dialogFragment = (DialogFragment) fragment; dialogFragment.dismissAllowingStateLoss(); } FragmentManager childFragmentManager = fragment.getChildFragmentManager(); if (childFragmentManager != null) dismissAllDialogs(childFragmentManager); } } 

Con el reciente énfasis de Android en el uso de contenedor de DialogFragment wil no es necesario llamar a descartar en cada uno

Dado que los cuadros de diálogo tendrán un contenedor de fragmentos, simplemente puede utilizar su ciclo de vida . Considere este DialogFragment:

 public class FragDialog extends DialogFragment{ public ProgressDialog _dialog; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState != null) { //this.dismiss(); <-- The dialogs may be dismissed here } } @Override public Dialog onCreateDialog(final Bundle savedInstanceState) { _dialog = new ProgressDialog(getActivity()); return _dialog; } @Override public void onPause() { super.onPause(); // <--------- You may overload onPause } } 

Que se mostrará en su actividad con un gestor de fragmentos normalmente llamando así:

 FragmentManager fm = getSupportFragmentManager(); FragDialog fragDialog = new FragDialog(); fragDialog.show(fm, "my_tag"); 

Tenga en cuenta que en realidad puede alterar lo que el DialogFragment hace en onPause. Cuando su actividad llama onPause, esta onPause será llamada también.

Descartar el diálogo en onPause () usando this.dismiss () no hará el trabajo porque una vez que la actividad se reanude reanudará el diálogo también. (Creo que esto es porque el savestate se almacena antes de onPause).

Pero puede descartar con seguridad los diálogos en onCreate si detecta un savedInstanceState (un curriculum vitae) como se muestra en el código.

  • GetOwnerActivity devuelve nulo en el diálogo personalizado
  • Cómo configurar el fondo transparente como un cuadro de diálogo personalizado en android
  • Callback cuando se desactiva DialogFragment
  • ¿Cómo consumir y descartar el PopupWindow cuando se hace clic fuera?
  • Diálogo personalizado de Android
  • El diálogo de Android se descarta en el segundo clic. ¿Por qué?
  • ¿Cómo configurar el diálogo para mostrarlo con pantalla completa?
  • Cómo quitar el título en el cuadro de diálogo?
  • Diálogo sin bordes de Android
  • Onclick Listener para el botón Aceptar
  • Android: Cuadro de diálogo emergente
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.