Supongamos que deseo reemplazar el fragmento actual en alguna vista de contenedor con otra. ¿Es mejor usar reemplazar ...
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.fragment_container, newFragment, null);
ft.commit();
... o lo siguiente, con show and hide?
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.hide(oldFragment);
ft.show(newFragment);
ft.commit();
¿Hay alguna forma de hacer esto más eficiente? No puedo encontrar mucha información sobre cuándo usar estos métodos o cómo afectan el ciclo de vida de los fragmentos involucrados. ¡Gracias!
android
android-fragments
Robert Karl
fuente
fuente
Respuestas:
Debe considerar lo que planea hacer con el fragmento para decidir qué camino seguir. Si usa FragmentTransaction para ocultar el fragmento, aún puede estar en el estado de ejecución de su ciclo de vida, pero su interfaz de usuario se ha separado de la ventana, por lo que ya no es visible. Por lo tanto, técnicamente aún podría interactuar con el fragmento y volver a adjuntar su interfaz de usuario más tarde si lo necesita. Si reemplaza el fragmento, en realidad lo está sacando del contenedor y pasará por todos los eventos de desmontaje en el ciclo de vida (onPause, onStop, etc.) y si por alguna razón necesita ese fragmento nuevamente, tendrá que hacerlo insértelo de nuevo en el contenedor y déjelo ejecutar de nuevo a través de toda su inicialización.
Si existe una alta probabilidad de que necesite ese fragmento nuevamente, simplemente ocúltelo porque es una operación menos costosa volver a dibujar su diseño que reinicializarlo por completo.
fuente
hide()
yshow()
ahorremos en eso! ¡Gracias por esto!Básicamente te respondiste a ti mismo. Si desea reemplazar (por lo que el fragmento antiguo ya no es necesario) úselo
replace()
si desea ocultarlo temporalmente y luego hágalohide()
.fuente
Usé el método hide / Show en mi actividad con 4 fragmentos, su solución se resolvió, pero en algún momento, al azar, cuando muestro mi cuadro de diálogo, le da una excepción de token de ventana incorrecta cuando utilicé el método de agregar y reemplazar, entonces la excepción de token incorrecto no se produce, así que creo que mostrar / ocultar el método no es perfecto
fuente