Fragmentos de Android: ¿Cuándo usar hide / show o add / remove / replace?

Supongamos que deseo reemplazar el fragmento actual en una vista de contenedor con otro. ¿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(); 

¿Es una forma de hacer esto más eficiente? No se puede encontrar mucha información sobre cuándo usar estos métodos, o cómo afectan el ciclo de vida de los fragmentos involucrados. ¡Gracias!

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 UI se ha separado de la ventana para que ya no esté visible. Entonces, técnicamente, podrías interactuar con el fragmento y volver a conectar su interfaz de usuario más adelante. Si reemplaza el fragmento, en realidad lo está sacando del contenedor y atravesará todos los eventos de desassembly en el ciclo de vida (onPause, onStop, etc.) y si por alguna razón necesita ese fragmento de nuevo, tendrá que vuelva a insertarlo en el contenedor y permita que vuelva a ejecutarse durante toda su inicialización.

Si hay una alta probabilidad de que necesite ese fragmento nuevamente, simplemente ocultelo porque es una operación menos costosa para volver a dibujar su diseño que reiniciarlo por completo.

Básicamente respondiste a ti mismo. Si desea reemplazar (por lo que el fragmento antiguo ya no es necesario) utilice replace() si desea ocultarlo temporalmente y luego hide() .