android - studio - Diferencia entre agregar() y reemplazar() con el ciclo de vida del Fragmento
proyectos android studio pdf (2)
Cuando reemplaza, está intercambiando todos los fragmentos (1,2,3,4,5) en el ViewGroup
R.id.container
para su nuevo Fragment
(6). Una vez que los fragmentos hayan sido removidos, serán destruidos. Cuando se destruyen, llamarán al método onDestroyView()
.
FragmentTransaction reemplazar
Con respecto a su pregunta para 2 y 4, no estoy seguro. ¿Puedes publicar más del código que se escribe en logcat?
Mi programa tiene 6 fragmentos: Fragmento1, Fragmento2, ....-> Fragmento6.
Utilizo las instrucciones add () y replace () para cambiar entre el fragmento y realizar un seguimiento de su ciclo de vida.
Fragmento1 agregar Fragmento2 agregar Fragmento3 agregar Fragmento4 agregar Fragmento5 reemplazar Fragmento6
El log-cat muestra su ciclo de vida (tengo algunos puntos printf en onCreate, onCreateView, onDestroyView, onDestroy para seguimiento)
Etiqueta __ _ __ _ __ _ __ _ __ Texto
Fragmento1_ _ __ _ ___ _onCrear
Fragmento1_ _ __ _ ___ _onCreateView
Fragmento1_ _ __ _ ___ _add Fragmento2
Fragmento2_ _ __ _ ___ _onCrear
Fragment2_ _ __ _ ___ _onCreateView
Fragmento2_ _ __ _ ___ _add Fragmento3
Fragmento 3_ _ __ _ ___ _onCrear
Fragmento3_ _ __ _ ___ _onCreateView
Fragmento 3_ _ __ _ ___ _add Fragmento 4
Fragmento 4_ _ __ _ ___ _onCrear
Fragmento 4_ _ __ _ ___ _onCreateView
Fragmento 4_ _ __ _ ___ _add Fragmento 5
Fragmento 5_ _ __ _ ___ _onCrear
Fragmento 5_ _ __ _ ___ _onCreateView
Fragmento 5 __ _ __ _ _ reemplazar Fragmento 6
Fragmento 1 __ _ __ _ _ onDestroyView
Fragmento 3 __ _ __ _ _ onDestroyView
Fragmento 5 __ _ __ _ _ onDestroyView
Fragmento 6_ _ __ _ ___ _onCrear
Fragmento 6_ _ __ _ ___ _onCreateView
Mis preguntas:
¿Por qué después de que Fragment5 es reemplazado por Fragment6, los Fragmento 1 y 3 y 5 destruyen su vista?
¿Qué está pasando con Fragment2 & 4?
¿Por qué Fragment2 y 4 no destruyen su vista como Fragmento 1 y 3 y 5?
Ayúdeme a comprender el ciclo de vida de los fragmentos cuando llame 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();
}
Si usa un FragmentTransaction
para ocultar el fragmento, entonces todavía puede estar en el estado de ejecución de su ciclo de vida, pero su UI se ha separado de la ventana, por lo que ya no está visible. Por lo tanto, técnicamente aún podría interactuar con el fragmento y volver a adjuntar su interfaz de usuario más adelante. Si reemplaza el fragmento, entonces realmente lo está extrayendo 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, deberá Insértelo nuevamente en el contenedor y déjelo correr a través de toda su inicialización nuevamente.