Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cómo descartar correctamente un DialogFragment?

Los documentos dicen esto para el método dismiss() de la clase Dialog :

 Dismiss this dialog, removing it from the screen. This method can be invoked safely from any thread. Note that you should not override this method to do cleanup when the dialog is dismissed, instead implement that in onStop(). 

En mi código, todo lo que hago es llamar a getDialog().dismiss() para descartarlo. Pero no estoy haciendo nada más ni siquiera usando onStop() . Así que estoy pidiendo exactamente cómo descartar correctamente un DialogFragment para evitar fugas de memoria, etc.

  • Cómo ejecutar la acción después de pulsar el botón positivo de DialogFragment
  • Cómo crear un nuevo cuadro de diálogo "circle" datepicker android
  • ¿Cómo subir un DialogFragment sobre otro?
  • OnContextItemSelected no se llama en un DialogFragment
  • AndroidRuntimeException: requestFeature () debe ser llamado antes de agregar contenido
  • Cambio de color de los botones DialogFragment en Lollipop
  • Cómo hacer el ancho de DialogFragment a Fill_Parent
  • ¿Cómo conservar el oyente en el cuadro de diálogo personalizado abierto desde el fragmento?
  • 3 Solutions collect form web for “Cómo descartar correctamente un DialogFragment?”

    Tl; dr: La forma correcta de cerrar un DialogFragment es utilizar DialogFragment dismiss() directamente en el DialogFragment .


    Detalles : La documentación de los estados de DialogFragment

    El control del diálogo (decidir cuándo mostrarlo, ocultarlo, despedirlo) se debe hacer a través de la API aquí, no con llamadas directas en el diálogo.

    Por lo tanto, no debe utilizar getDialog().dismiss() , ya que invocar dismiss() en el diálogo . En su lugar, debe utilizar el método dismiss dismiss() del propio DialogFragment:

    Public void dismiss ()

    Descartar el fragmento y su diálogo. Si el fragmento se agregó a la pila trasera, todo el estado de pila posterior hasta e incluyendo esta entrada se disparó. De lo contrario, se realizará una nueva transacción para eliminar el fragmento.

    Como puede ver, esto se encarga no sólo de cerrar el diálogo, sino también de manejar las transacciones de fragmentos involucradas en el proceso.

    Sólo necesita utilizar onStop si ha creado explícitamente los recursos que requieren limpieza manual (cierre de archivos, cierre de cursores, etc.). Incluso entonces, anularía onStop del DialogFragment en lugar de onStop del Diálogo subyacente.

    Creo que una mejor manera de cerrar un DialogFragment es esto:

      Fragment prev = getSupportFragmentManager().findFragmentByTag("fragment_dialog"); if (prev != null) { DialogFragment df = (DialogFragment) prev; df.dismiss(); } 

    De esta manera usted no tiene que mantener una referencia a DialogFragment y puede cerrarlo desde cualquier lugar.

    Debe descartarlo en el onPause() Dialog onPause() para anularlo.

    También antes de descartar puede comprobar si hay null y se muestra como debajo del fragmento:

     @Override protected void onPause() { super.onPause(); if (dialog != null && dialog.isShowing()) { dialog.dismiss(); } } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.