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.
- Android Project Fragment Transición lanzando Excepción cuando Build target used Nueva API Nivel 21
- ¿Cómo manejar correctamente la rotación de la pantalla con un ViewPager y fragmentos anidados?
- Android: Uso de StreetViewPanoramaView en XML
- Cómo implementar OnFragmentInteractionListener
- OnActivityResult no se llama después de startIntentSenderForResult
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(); }
- Android - API de Google Maps v2 - Errores de SupportMapFragment
- Fragmentos, exhibido, uno encima de otro
- Fragmentos no siempre se reemplazan cuando se utiliza el botón Atrás
- Android: FragmentTransaction ocultar no funciona para DialogFragment
- ¿Qué método se llama después de popBackStack?
- Orden de transacciones de fragmentos múltiples de Android
- ViewPager dentro del fragmento
- Fragmentos dentro de ViewPager desaparecen cuando cambia la orientación
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.
- Android Library dependencias rotas después de SDK / ADT-Update
- El archivo de lectura del directorio de activos lanza FileNotFoundException