studio programacion herramientas fundamentos descargar con avanzado aplicaciones android dialog

programacion - Android-Cómo descartar todos los diálogos en onPause



manual android studio avanzado (3)

Tengo una actividad que podría mostrar diferentes diálogos durante el tiempo de ejecución. Utilizo onCreateDialog (int id) para crear cada cuadro de diálogo y uso los métodos showDialog (int id) y dismissDialog (int id) para mostrar y descartar cada diálogo respectivamente.

Cuando se llama a OnPause (), no sé qué cuadro de diálogo (si hay alguno) se está mostrando. Quiero asegurarme de que cuando se llama a OnPause, todos los cuadros de diálogo se borran. ¿Hay alguna forma recomendada de descartar todos los diálogos? ¿Tendría que llamar a despidearDialog () para cada diálogo?


Con el énfasis reciente de Android en el uso del contenedor DialogFragment , no tendrá que llamar a despedir a cada uno.

Como los cuadros de diálogo tendrán un contenedor de fragmentos, simplemente puede usar su ciclo de vida . Considera 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 } }

Lo que mostrarás en tu actividad usando un fragmentmanager normalmente llamándolo así:

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

Tenga en cuenta que realmente puede alterar lo que hace DialogFragment en onPause. Cuando su actividad llame a Pausa, se llamará también a esta Pausa.

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

Pero puede descartar de forma segura los diálogos en onCreate si detecta un estado de instancia guardado (un currículum vitae) como se muestra en el código.


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

Puede haber maneras elegantes de hacer esto además 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 estén declarados y luego recorrer la lista y cerrar cada uno de ellos en pausa.

Como no sabe cuáles están abiertos, tendrá que pasar y probar o rastrear los estados.

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


Si está utilizando DialogFragment y desea descartar todo lo que pueda usar:

/** * 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); } }