Diferencia entre add () & replace () con el ciclo de vida de Fragment

Mi programa tiene 6 fragmentos: Fragment1, Fragment2, ….-> Fragment6.

Utilizo la instrucción add () y replace () para cambiar entre el fragmento y rastrear su ciclo de vida.

Fragment1 add Fragment2 add Fragment3 add Fragment4 add Fragment5 reemplazar Fragment6

El log-cat mostrar su ciclo de vida (tengo algunos puntos printf en onCreate, onCreateView, onDestroyView, onDestroy para el seguimiento)


Etiqueta

Fragmento 1_ _ _ _ _ _ _ _ _ _

Fragmento1_ _ __ _ ___ _onCreateView

Fragmento1_ _ __ _ ___ _add Fragmento2

Fragmento 2_ _ _ _ _ _ _ _ _

Fragmento2_ _ __ _ ___ _onCreateView

Fragmento2_ _ __ _ ___ _add Fragmento3

Fragmento3_ _ __ _ ___ _onCreate

Fragmento3_ _ __ _ ___ _onCreateView

Fragmento3_ _ __ _ ___ _add Fragmento4

Fragmento4_ _ _ _ _ _ _ _ _

Fragment4_ _ __ _ ___ _onCreateView

Fragmento4_ _ __ _ ___ _add Fragmento5

Fragmento 5_ _ _ _ _ _ _ _ _ _

Fragmento5_ _ __ _ ___ _onCreateView

Fragmento5 __ _ __ _ _ reemplazar Fragmento6

Fragmento1 __ _ __ _ _ onDestroyView

Fragmento3 __ _ __ _ _ onDestroyView

Fragmento5 __ _ __ _ _ onDestroyView

Fragmento__

Fragment6_ _ __ _ ___ _onCreateView


Mis preguntas:

¿Por qué después de que el Fragmento5 sea reemplazado por Fragmento6, el Fragmento1 y 3 & 5 se destruyen su vista ?.

¿Qué sucede con Fragment2 & 4?

¿Por qué Fragment2 y 4 no se destruyen su visión como Fragment1 & 3 & 5?

Por favor, ayúdame a comprender completamente el ciclo de vida de los fragmentos cuando llama al método add () y replace ().


Actualizar mi método addFragment y replaceFragment:

public void addFragment(Fragment fromFragment, Fragment toFragment) { FragmentManager manager = getFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); transaction.add(R.id.container,toFragment, toFragment.getClass().getName()); transaction.hide(fromFragment); transaction.addToBackStack(toFragment.getClass().getName()); transaction.commit(); } public void replaceFragment(Fragment fromFragment, Fragment toFragment) { FragmentManager manager = getFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); transaction.replace(R.id.container,toFragment, toFragment.getClass().getName()); transaction.hide(fromFragment); transaction.addToBackStack(toFragment.getClass().getName()); transaction.commit(); } 

Cuando reemplazas, estás intercambiando todos los fragmentos (1,2,3,4,5) en el ViewGroup R.id.container para tu nuevo Fragment (6). Una vez que los fragmentos han sido eliminados, serán destruidos. Cuando se destruye, se llamará el método onDestroyView() .

FragmentTransaction reemplazar

Con respecto a su pregunta para 2 y 4, no estoy seguro. ¿Es usted capaz de publicar más del código lo que escribe en logcat?

Si utiliza un FragmentTransaction para ocultar el fragmento, puede seguir en el estado de ejecución de su ciclo de vida, pero su interfaz de usuario se ha desvinculado de la ventana, por lo que ya no es visible. Así que técnicamente todavía puede interactuar con el fragmento y volver a conectar su interfaz de usuario más tarde que necesita. Si reemplaza el fragmento, entonces 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 de nuevo tendría que insertarlo de nuevo en el contenedor y dejarlo correr a través de toda su inicialización de nuevo.

  • ¿Ciclo de vida de un ViewPager y BackStack reemplazados?
  • SoftKeyboard no se muestra para un Fragmento recién mostrado
  • Taps rápidos (clics) en RecyclerView abre varios fragmentos
  • Android - android.view.InflateException: Archivo XML binario línea # 8: Error al inflar fragmento de clase
  • ¿Ha cambiado el título en el cambio de orientación?
  • Android - limitar el número de fragmentos en backStack?
  • Guardar y restaurar el estado de la interfaz de usuario del fragmento cuando se empuja y sale del backstack
  • ¿Cómo puedo establecer la visibilidad de un elemento de ActionBar en fragmento diferente
  • Android: el paquete savedInstanceState es null en Fragment onCreate () y onCreateView ()
  • Android: Administrador de fragmentos se convierte en nulo
  • ¿Cómo cambio la vista dentro de un fragmento?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.