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.

  • ¿Es posible crear una anchura fija en XML?
  • Enviar evento clave de retroceso para editar el texto
  • SimpleCursorAdapter alternativa
  • Causa de NullPointerException android.support.v7.widget.RecyclerView.onMeasure
  • Cómo probar la aplicación basada en Bluetooth en Androidx86 en la parte superior de VirtualBox con Bluetooth incorporado bluetooth
  • Uso de activos en pruebas roboeléctricas
  • La columna MediaStore.MediaColumns.TITLE de MediaStore de Android es nula para algunos archivos
  • Detección de solicitud de aplicación de VPN Service + Packets bloqueando
  • Impedir introducir la clave en EditText pero todavía mostrar el texto como multi-line
  • ¿Cómo obtener el historial de chat Openfire en un dispositivo Android con aSmack?
  • Obtener el nombre del dispositivo Android
  • Crear PDU para Android que funciona con SmsMessage.createFromPdu () (GSM 3gpp)
  • 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.