tutoriales studio proyectos programacion guia desarrollo avanzado aplicaciones android android-fragments fragment-lifecycle

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.