Llamando onBackPressed desde un DialogFragment se finaliza la actividad.
Tengo un fragmento de diálogo que tiene un botón de cierre.
Este diálogo se llama desde dos actividades diferentes. Una lo usa como un fragmento simple y otra como un fragmento de diálogo.
En su método onClick, llamo a requireActivity.onBackPress()
para que cierre el diálogo.
No quiero llamar a dismiss, porque tengo un caso de uso en el que quiero que la actividad que lo llama lo maneje (mostrar un diálogo de confirmación).
En la actividad que lo muestra como un fragmento de diálogo, llamar a onBackPress
no solo cierra el diálogo sino también finaliza la actividad :scary_face
Pulsar el botón de retroceso real simplemente lo descarta.
¿Algún pensamiento sobre qué me falta aquí?
Código del fragmento de diálogo:
viewBinding.closeBtn.setOnClickListener {
requireActivity().onBackPressed()
}
Código que inicia el fragmento de diálogo
SharePatientDialogFragment.newInstance(shareData)
.show(context.supportFragmentManager, "share")
davy.ai
Parece que el problema está en el método
onBackPressed()
llamado desde el fragmento de diálogo. Cuando se lanza el fragmento de diálogo como un diálogo, llamar aonBackPressed()
activará el comportamiento del botón de retroceso que incluye descartar el diálogo y finalizar la actividad. Para resolver este problema sin usardismiss()
, puedes crear una interfaz de escucha en el fragmento de diálogo y hacer que la actividad que llama la implemente para manejar la acción de cierre.Primero, crea una interfaz en la clase de tu fragmento de diálogo:
Luego, agrega una variable para contener la instancia de la escucha en la clase del fragmento de diálogo:
A continuación, modifica el método onClick del botón de cierre para llamar a la escucha en lugar de
onBackPressed()
:En la actividad que utiliza el fragmento de diálogo, implementa la interfaz OnCloseListener y pasa su instancia al fragmento de diálogo:
Ahora, cuando se hace clic en el botón de cierre en el fragmento de diálogo, llamará el método
onClose()
en la actividad, que puedes usar para mostrar un diálogo de confirmación o manejar la acción de cierre según sea necesario.