Lanzando una actividad dentro de un fragmento específico, luego volviendo a la actividad anterior desde donde fue lanzada.
He estado luchando con un desafío particular que es el siguiente:
Mi aplicación tiene una actividad “A” que se considera la actividad “principal” de la aplicación. En un cierto punto, se lanza una actividad “B” que tiene una acción disponible que debería lanzar un fragmento dentro de la actividad “A” (esto no siempre será el mismo fragmento, dependerá de algunos datos que vienen de nuestro backend).
Puedo hacer esto simplemente llamando a startActivity
con el Intent correcto, sin embargo, al presionar el botón de retroceso, vuelve al “fragmento principal” de A (esto es lógica implementada dentro de onBackPressed()
de A). Básicamente, lo que debería suceder es lo siguiente:
Actividad A -> Actividad B -> Actividad A mostrando Fragmento X -> presionar retroceso -> Actividad B
Lo que sucede al usar startActivity
para lanzar la Actividad A:
Actividad A -> Actividad B -> Actividad A mostrando Fragmento X -> presionar retroceso -> Actividad A mostrando el “fragmento principal”. A partir de aquí, si presiono retroceso nuevamente, la aplicación se cierra, lo cual, de nuevo, es parte de la implementación de onBackPressed()
de A. Sin embargo, he intentado recuperar un “extra” del Intent que llamó a A con el fin de mostrar condicionalmente la actividad B, pero el Intent parecía estar vacío de extras por razones que no puedo entender. Estoy seguro de que estoy colocando correctamente los extras en el Intent, ya que la actividad A muestra el fragmento correcto cuando es invocado desde B basado en lo que pongo allí.
Más cosas que he intentado:
- Lanzar el fragmento deseado directamente desde B, sin embargo, de esta manera, el fragmento no se muestra con la barra de navegación que existe en A y parece mostrar el contenido principal de la actividad B detrás de los elementos del fragmento, lo cual es indeseable en términos de experiencia de usuario.
-
Usar la bandera
Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
, que parecía no hacer ninguna diferencia en absoluto.
Como esto es parte de la aplicación de mi empresa, que ya tiene un grado decente de complejidad, no puedo proporcionarte ejemplos de código útiles, y espero que mi descripción sea suficiente para que alguien pueda ayudarme.
Información adicional:
targetApi=”n”
Probando en Android 11
La Actividad A tiene launchMode
“singleTask”
La Actividad B tiene launchMode
“singleTop”
davy.ai
Solución para la navegación hacia atrás al lanzar un fragmento específico desde la Actividad B en Android
Para resolver el problema de la navegación hacia atrás al lanzar un fragmento específico desde la Actividad B en Android, puedes utilizar FragmentManager para reemplazar el fragmento principal en la Actividad A con el fragmento deseado. De esta manera, cuando presiones el botón de retroceso, volverá a la actividad anterior, que es la Actividad B.
Aquí tienes los pasos:
Este método toma un objeto Fragment como parámetro, obtiene el FragmentManager, inicia una transacción, reemplaza el fragmento actual en el contenedor con el fragmento deseado, agrega la transacción a la pila de retroceso y realiza la transacción.
El
R.id.fragment_container
es el ID del contenedor en la Actividad A donde se muestran los fragmentos.En la Actividad B, cuando se activa la acción para lanzar el fragmento deseado, utiliza un Intent para pasar los datos necesarios a la Actividad A y establece una bandera que indique que deseas lanzar el fragmento deseado:
Aquí,
"data"
son los datos que provienen del backend y"launch_fragment"
es la bandera que indica que deseas lanzar el fragmento deseado.En el método
onCreate()
de la Actividad A, verifica si la bandera"launch_fragment"
está establecida y, si es así, obtén los datos del intent, crea el fragmento deseado y reemplaza el fragmento principal con él:Aquí,
DesiredFragment
es la clase del fragmento que deseas lanzar.Por último, asegúrate de que el método
onBackPressed()
de la Actividad A llame asuper.onBackPressed()
para permitir que la navegación hacia atrás funcione correctamente.Con esta solución, puedes lanzar el fragmento deseado desde la Actividad B y, cuando presiones el botón de retroceso, volverás a la Actividad B.
¡Espero que esto te ayude!