from fragments example delete backstack addtobackstack android android-fragments fragment back-stack

android - fragments - Métodos de fragmento: attach(), detach(), remove(), replace(), popBackStack()



delete fragment from backstack (3)

Ahora cuando llamamos remove () al fragmento de nuestra actividad, ¿a qué funciones del fragmento se llama y en qué orden?

Mira http://developer.android.com/reference/android/app/Fragment.html .

El orden es: onPause() , onStop() , onDestroyView() , onDestroy() , onDetach()

¿Qué hace attach () y detach () hacer? ¿Detach () elimina el fragmento? Y cuando se usan estos dos attach () y detach (), ¿qué funciones del fragmento se llaman y en qué orden?

attach() y detach() respectivamente asocian o separan el Fragment con / de la Activty . Al onAttach() el Fragment , se llama al método de ciclo de vida onAttach() , al separar, se llama al método de ciclo de vida onDetach() en el Fragment . Para más información mira el enlace de arriba.

Además, ¿qué sucede en popBackStack ()? Me refiero a qué funciones se llaman cuando utilizamos popBackStack () en el fragmento de nuestra actividad?

Si el Fragment no ha sido destruido, entonces en popBackStack() onStart() los onStart() y onResume() . Si el Fragment se ha destruido previamente, los métodos del ciclo de vida se onAttach() a partir de onAttach() . Es lo mismo que cuando presiona el botón Atrás en Activities .

Estoy muy confundido entre estas funciones y sus propósitos. Lo que he observado es que el uso de replace() reemplaza el fragmento existente por uno nuevo. Podemos usar addToBackStack(null) para poner ese fragmento en la pila posterior para que podamos volver al fragmento mostrado anteriormente. Ahora cuando se agrega (o reemplaza) un fragmento - onAttach() -> onCreate() etc ... los métodos del fragmento se llaman en orden.

Ahora cuando llamamos remove() al fragmento de nuestra actividad, ¿a qué funciones del fragmento se llama y en qué orden?

¿Qué hace attach() y detach() hacer? ¿ detach() elimina el fragmento? Y cuando se usan estos dos attach() y detach() , ¿qué funciones del fragmento se llaman y en qué orden?

Además, ¿qué sucede en popBackStack() ? Me refiero a qué funciones se llaman cuando utilizamos popBackStack() en el fragmento de nuestra actividad?

¿Y cuándo se llama onDestroy ()?

Gracias.


Solo una nota sobre popBackStack() . No muestra un fragmento, aparece una transacción de fragmento. Entonces cualquiera que sea la última transacción de fragmento se invierte. Si estaba mostrando un FragmentA y su transacción fue:

fragmentTransaction.replace(R.id.your_layout, fragmentB); fragmentTransaction.addToBackStack(null);

Reemplazaría a FragmentA con FragmentB y agregaría esa transacción (no el fragmento) a la pila de respaldo. Si luego presiona el botón Atrás, aparece la pila de respaldo y obtiene la transacción, que fue "reemplazar esta FragmentA por una FragmentB ". Luego revierte esa transacción. Al revés, la instrucción es reemplazar cualquier fragmento actual con FragmentA . Si el FragmentA original aún existe, usa ese. Si ha sido destruido, hace uno nuevo.


Supongamos que el fragmento A y el fragmento B se agregaron a un contenedor con los siguientes pasos:

1. Added fragment A => .replace(R.id.container, fragmentA) => addToBackStack(null) 2. Added fragment B => .replace(R.id.container, fragmentB) => addToBackStack(null) 3. Removed fragment B => fragmentManager.popBackStack();

Devolución de llamada cuando se llama fm.popBackStack ():

FragmentB: onPause() FragmentB: onStop() FragmentB: onDestroy() FragmentB: onDetach() FragmentA: onCreateView() FragmentA: onViewCreated() FragmentA: onActivityCreated() FragmentA: onStart() FragmentA: onResume()

Explicación: ¿Por qué al eliminar y destruir el fragmento B utilizando popBackStack (), se volvió a crear el fragmento A y se reanudó la vista?

Respuesta: Cuando agregó el fragmento B, utilizó replace () y addToBackStack (), por lo que todos los fragmentos se eliminaron del contenedor y el fragmento B se agregó al contenedor. Y, también, esta transacción se registró en la pila de Atrás. Entonces, cuando se llama a fm.popBackStack (), primero la transacción se saca de la pila de respaldo y las operaciones se revierten a sí mismas, por lo tanto, el fragmento b se elimina del contenedor y se destruye. Y todos los demás fragmentos se agregan, para nuestro caso la vista de fragmento A se agrega al contenedor. También se observó que el fragmento A''s onAttach & onCreate () no se llama porque ya se ha creado y adjuntado a MainActivity anteriormente.

La retroceso en el fragmento B hace lo mismo:

If you press the back button, it calls fm.popBackStack() and pops the transaction.