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?
- Set timeout Diálogo en android?
- ShowDialog obsoleta. ¿Cuál es la alternativa?
- Android Prevent Bluetooth Dialing Dialog
- Aplicar el tema al diálogo DialogPreference
- Descartar problema de cuadro de diálogo personalizado
- ¿Cómo evitar que ProgressDialog descarte el cambio de rotación de la pantalla en Android?
- ¿El diálogo detiene la actividad de llamada?
- ¿Cómo actualizar los valores de setMultiChoiceItems en onPrepareDialog?
- Set Diálogo de actividad no cancanable
- ¿Cómo agregar el título al cuadro de diálogo personalizado?
- Ancla el cuadro de diálogo Android a una vista
- Cómo cerrar / cancelar / descartar un Diálogo del sistema de forma programática (Android)
- Diálogo Android, mantener el cuadro de diálogo abierto cuando se pulsa el botón
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.
- Cómo enviar datos POST con código en una vista web de Android
- Cómo hacer una aplicación de radio FM en Android