Los documentos dicen esto para el dismiss()
método de la Dialog
clase:
Descarte este diálogo, eliminándolo de la pantalla. Este método se puede invocar de forma segura desde cualquier hilo. Tenga en cuenta que no debe anular este método para realizar la limpieza cuando se cierra el cuadro de diálogo, sino implementarlo en
onStop()
.
En mi código, todo lo que hago es llamar getDialog().dismiss()
para descartarlo. Pero no estoy haciendo nada más ni siquiera consumiendo onStop()
. Así que pregunto exactamente cómo descartar correctamente un DialogFragment
para evitar pérdidas de memoria, etc.
protected void showDialogFragment(final DialogFragment fragment) {final FragmentTransaction fTransaction = getSupportFragmentManager().beginTransaction(); fTransaction.addToBackStack(null); fragment.show(fTransaction, "dialog");}
¡Perdón por el desagradable delineador! Pero sí, podrías tener razón, así que por el momento he escrito otra forma de cerrar mis DialogFragments. La forma en que los descartaba usando el método despedir () era simplemente encontrar el fragmento por etiqueta y luego ejecutar despedir () en él si no era nulo. Ah, y sí, estoynew
grabando el fragmento justo antes de pasarlo a ese método.Creo que una mejor manera de cerrar una
DialogFragment
es esta:De esta manera, no es necesario que mantenga una referencia al
DialogFragment
y puede cerrarlo desde cualquier lugar.fuente
¿Por qué no intentas usar solo este código?
Si desea descartar el fragmento de diálogo por sí solo. Simplemente puede poner este código dentro del fragmento de diálogo donde desea cerrar el diálogo.
Por ejemplo:
Esto cerrará el fragmento de diálogo reciente que se muestra en la pantalla.
Espero que te ayude.
fuente
Di un voto positivo a la respuesta de Terel. Solo quería publicar esto para cualquier usuario de Kotlin:
fuente
Respuesta de Kotlin Versión de Terel
fuente
Deberías despedirte
Dialog
enonPause()
lo que anularlo.Además, antes de descartar, puede verificar
null
y se muestra como el siguiente fragmento:fuente
DialogFragment
de Google no muestra en absoluto elonPause()
método que se está utilizando. Pero creo que veo lo que estás haciendo. Sin embargo, cuál es el punto si el usuario no está llamandoonPause()
. Es entonces cuando el sistema sabe que el fragmento está siendo retirado. ¿Qué pasa cuando, digamos, un usuario cancela? ¿Cuál es una mejor manera de cerrarlo en ese caso?Hay referencias a los documentos oficiales ( DialogFragment Reference ) en otras respuestas, pero no se menciona el ejemplo que se da allí:
Para mis necesidades lo cambié a:
fuente
Agregando a las otras respuestas, cuando se tiene una
DialogFragment
llamada a pantalla completadismiss()
, no aparecerá el DialogFragment de la pila de fragmentos. Una solución alternativa es llamaronBackPressed()
a la actividad principal.Algo como esto:
CustomDialogFragment.kt
fuente
Simplemente llame a descartar () desde el fragmento que desea descartar.
fuente
Descubrí que cuando mi fragmento se definía en el gráfico de navegación con una
<fragment>
etiqueta (para un fragmento de diálogo de pantalla completa), el fragmento de diálogo no se descartaba con eldismiss()
comando. En cambio, tuve que hacer estallar la pila trasera:Sin embargo, si el mismo fragmento de diálogo se definió en el gráfico de navegación con una
<dialog>
etiqueta,dismiss()
funciona bien.fuente
fuente