Cómo evitar volver a cargar un fragmento hijo dentro de un fragmento padre al presionar el botón Atrás en Android.
Mi fragment principal tiene demasiadas vistas para cargar debido a que las líneas de código en el archivo están aumentando. Para evitar esto, decidí separar las vistas utilizando un fragmento secundario. Ahora las vistas superiores están en el fragmento secundario y las vistas inferiores restantes están en el fragmento principal. Hasta aquí todo bien.
Ahora estoy abriendo un nuevo fragmento al hacer clic en una vista desde el fragmento principal. Cuando regreso al fragmento principal, se vuelve a cargar el fragmento secundario, lo que provoca una NullPointerException y que la aplicación se cierre.
A continuación se muestra la forma en que estoy añadiendo fragmentos secundarios:
childFragmentManager.beginTransaction()
.replace(R.id.fragment_container, fragment)
.commitAllowingStateLoss()
Para una mejor comprensión, puedes ver la siguiente imagen:
Estoy usando la navegación con BottomNavigationBar.
- ¿Cómo puedo evitar esto?
- En algunos casos, las vistas del fragmento parpadean al volver a ese fragmento. ¿Cómo puedo evitar eso?
davy.ai
add()
en lugar dereplace()
. Esto añadirá el fragmento hijo a la jerarquía de vistas del fragmento principal sin eliminarlo al reemplazar el fragmento. Luego puedes utilizar los métodoshide()
yshow()
para ocultar y mostrar el fragmento hijo según sea necesario. De esta manera, el fragmento hijo solo se recargará si lo eliminas explícitamente.Aquí tienes un ejemplo de código:
Para mostrar el fragmento hijo:
Para ocultar el fragmento hijo:
setReorderingAllowed(true)
en el métodoonCreateView()
del fragmento principal. Esto habilitará el reordenamiento de vistas, lo cual puede mejorar la suavidad visual de las transiciones de fragmentos. También puedes intentar establecer el atributotransitionName
en las vistas de ambos fragmentos para asegurarte de que la jerarquía de vistas se anime correctamente durante las transiciones de fragmentos.