¿Cómo implementar onBackPressed() en Fragments?
¿Existe una forma de implementar onBackPressed()
en Android Fragment de forma similar a la que implementamos en Android Activity?
Ya que el ciclo de vida de Fragment no tiene onBackPressed()
. ¿Existe algún otro método alternativo para sobrepasar onBackPressed()
en los fragmentos de Android 3.0?
418
3
De acuerdo con la respuesta de @HaMMeRed aquí está el pseudocódigo de cómo debería funcionar. Digamos que su actividad principal se llama
BaseActivity
que tiene fragmentos hijo (como en SlidingMenu lib ejemplo). Aquí están los pasos:Primero necesitamos crear una interfaz y una clase que implemente su interfaz para tener un método genérico
Crear la interfaz de clase
OnBackPressedListener
.Crear una clase que implemente las habilidades de
OnBackPressedListener
.A partir de ahora, trabajaremos sobre nuestro código
BaseActivity
y sus fragmentosCrea un listener privado sobre tu clase
BaseActivity
.Crear un método para establecer el listener en
BaseActivity
.en override
onBackPressed
implementar algo asíen tu fragmento en
onCreateView
debes añadir nuestro listenerVoilà, ahora al hacer clic en el fragmento de vuelta debe coger su método personalizado de vuelta.
Si quisieras este tipo de funcionalidad tendrías que anularla en tu actividad, y luego añadir una interfaz
YourBackPressed
a todos tus fragmentos, que llamarías en el fragmento correspondiente cada vez que se pulsara el botón de retroceso.Edición: Me gustaría añadir mi respuesta anterior.
Si tuviera que hacer esto hoy, utilizaría una emisión, o posiblemente una emisión ordenada si esperara que otros paneles se actualizaran al unísono con el panel de contenido principal.
El
LocalBroadcastManager
en la Biblioteca de Soporte puede ayudar con esto, y sólo tienes que enviar la emisión enonBackPressed
y suscribirte en tus fragmentos que te interesan. Creo que Messaging es una implementación más desacoplada y escalaría mejor, por lo que sería mi recomendación oficial de implementación ahora. Simplemente usa la acciónIntent
como filtro para tu mensaje. envía tu recién creadaACTION_BACK_PRESSED
, envíala desde tu actividad y escúchala en los fragmentos pertinentes.Sólo tienes que añadir
addToBackStack
mientras haces la transición entre tus fragmentos como se indica a continuación:si escribes
addToBackStack(null)
, lo manejará por sí mismo pero si le das una etiqueta, deberás manejarlo manualmente.