Estoy usando el paquete de compatibilidad para usar Fragments con Android 2.2. Al usar fragmentos y agregar transiciones entre ellos al backstack, me gustaría lograr el mismo comportamiento de onResume de una actividad, es decir, cada vez que un fragmento se coloca en "primer plano" (visible para el usuario) después de salir del backstack, me gustaría que se activara algún tipo de devolución de llamada dentro del fragmento (para realizar ciertos cambios en un recurso de IU compartido, por ejemplo).
Vi que no hay devolución de llamada incorporada dentro del marco de fragmentos. ¿Existe una buena práctica para lograrlo?
onCreateView
que se te pida el fragmento después de un pop.Respuestas:
A falta de una mejor solución, esto me funcionó: suponga que tengo 1 actividad (MyActivity) y algunos fragmentos que se reemplazan entre sí (solo uno es visible a la vez).
En MyActivity, agregue este oyente:
(Como puede ver, estoy usando el paquete de compatibilidad).
Implementación de getListener:
MyFragment.onFragmentResume()
se llamará después de pulsar "Atrás". sin embargo, algunas advertencias:FragmentTransaction.addToBackStack()
)fuente
He cambiado un poco la solución sugerida. Funciona mejor para mí así:
fuente
getFragments()
en SupportFragmentManager ... -1: - /Después de una
popStackBack()
, puede usar la siguiente devolución de llamada:onHiddenChanged(boolean hidden)
dentro de su fragmentofuente
La siguiente sección en Desarrolladores de Android describe un mecanismo de comunicación que crea devoluciones de llamada de eventos a la actividad . Para citar una línea de él:
Editar: el fragmento tiene un nombre
onStart(...)
que se invoca cuando el fragmento es visible para el usuario. De manera similar,onResume(...)
cuando está visible y funcionando activamente. Estos están vinculados a sus contrapartes de actividad. En resumen: useonResume()
fuente
En mi actividad onCreate ()
Utilice este método para capturar un fragmento específico y llamar a onResume ()
fuente
Un poco mejorado y envuelto en una solución de administrador.
Cosas a tener en cuenta. FragmentManager no es un singleton, solo administra Fragmentos dentro de Activity, por lo que en cada actividad será nuevo. Además, esta solución hasta ahora no tiene en cuenta a ViewPager que llama al método setUserVisibleHint () que ayuda a controlar la visibilidad de los Fragmentos.
Siéntase libre de utilizar las siguientes clases al tratar este problema (usa la inyección Dagger2). Actividad de llamada:
FragmentBackstackStateManager.java:
FragmentBackstackChangeListenerImpl.java:
BackstackCallback.java:
fuente
Si un fragmento se coloca en backstack, Android simplemente destruye su vista. La instancia del fragmento en sí no se mata. Una forma sencilla de empezar debería escuchar el evento onViewCreated, y poner la lógica "onResume ()" allí.
fuente
Esta es la respuesta correcta que puede llamar a onResume () siempre que el fragmento esté adjunto a la actividad. Alternativamente, puede usar onAttach y onDetach
fuente
onResume () para el fragmento funciona bien ...
fuente
y la extensión final de su Frament de RootFragment para ver el efecto
fuente
Mi solución es obtener el título actual de la barra de acciones en el Fragmento antes de establecerlo en el nuevo título. De esta manera, una vez que aparece el Fragmento, puedo volver a ese título.
fuente
He usado enum
FragmentTags
para definir todas mis clases de fragmentos.pasar
FragmentTags.TAG_FOR_FRAGMENT_A.name()
como etiqueta de fragmento.y ahora en
fuente