Pregunta Métodos de fragmento: attach (), detach (), remove (), replace (), popBackStack ()


Estoy muy confundido entre estas funciones y sus propósitos. Lo que he observado que usando replace() reemplaza el fragmento existente por uno nuevo. Nosotros 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() en el fragmento de nuestra actividad, ¿qué funciones del fragmento se llaman y en qué orden?

Que hace attach() y detach() ¿hacer? Hace detach() eliminar el fragmento? Y cuando estos dos attach() y detach() se utilizan, ¿qué funciones del fragmento se llaman y en qué orden?

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

¿Y cuándo se llama onDestroy ()?

Gracias.


32
2017-08-28 06:52


origen


Respuestas:


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

Mirar 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() es respectivamente asocia o separa el Fragment con / desde el Activty. Cuando se conecta el Fragment, el onAttach() se llama al método del ciclo de vida, al desconectar, onDetach() el método del ciclo de vida se llama 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 han sido destruidos, entonces popBackStack() el onStart() y onResume() los métodos se llaman. Si el Fragment ha sido destruido previamente, entonces los métodos del ciclo de vida serán llamados a partir de onAttach(). Es lo mismo que cuando presiona el botón Atrás Activities.


23
2017-08-28 07:46



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 estuvieras mostrando un FragmentA y su transacción fue:

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

Reemplazaría FragmentA con FragmentBy agrega 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 esto FragmentA con un FragmentB". A continuación, invierte esa transacción. Al revés, la instrucción es reemplazar cualquier fragmento actual con FragmentA. Si el original FragmentA todavía existe, usa ese. Si ha sido destruido, hace uno nuevo.


12
2018-02-10 16:27



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.

4
2018-02-28 10:56