studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android android-fragments

para - manual de programacion android pdf



¿Cuál es la diferencia entre separar un Fragmento y eliminarlo? (2)

El método de separación elimina el fragmento de la interfaz de usuario, pero su estado es mantenido por el administrador de fragmentos. Esto significa que puede reutilizar este fragmento llamando al método attach, con una ViewHierarchy modificada

Eliminar significa que la instancia del fragmento no se puede volver a adjuntar. Tendrá que agregarlo nuevamente a la transacción de fragmento.

Fuente Comentario

Notarás que cuando se separa un Fragmento, solo se invocan sus métodos onPause, onStop y onDestroyView (en ese orden). Por otro lado, cuando se elimina un Fragmento, se llaman sus métodos onPause, onStop, onDestroyView, onDestroy y onDetach (en ese orden). Del mismo modo, al adjuntar, solo se llaman los métodos onCreateView, onStart y onResume del Fragmento; y al agregar, se invocan los métodos onAttach, onCreate, onCreateView, onStart y onResume del Fragmento (en ese orden). - Adil Hussain

En los documentos de Android para FragmentTransaction noté dos métodos muy similares: detach y remove . Las descripciones de allí no parecen proporcionar mucha información sobre cuándo usar cada una, y por lo que puedo decir, parecen ser las mismas.

Entonces, ¿cuáles son las diferencias entre estos dos métodos?


La denominación de los métodos de administración de fragmentos es muy confusa incluso según los ingenieros de Google en tableros de mensajes (ver comentarios arriba). Me hice una pequeña demostración para descubrir cómo funcionan las cosas en realidad. Aquí están mis hallazgos. Siéntete libre de corregirme si estoy equivocado.

Para agregar inicialmente un Fragmento a una Actividad, use: getFragmentManager (). BeginTransaction (). Add (R.id.container, mFragment) .commit ().

Esto asocia la Actividad con el Fragmento y también asocia una Vista con el Fragmento.

Aquí están los eventos del ciclo de vida resultantes y otros valores de retorno de método importantes:

onAttach() onCreate() onCreateView() onViewCreated() onActivityCreated() onViewStateRestored() onStart() onResume() mFragment.getView() == null: false mFragment.getActivity() == null: false

Para eliminar un Fragmento de una Actividad, utiliza: getFragmentManager (). BeginTransaction (). Remove (mFragment) .commit ().

Esto elimina cualquier asociación con una Vista o una Actividad.

Aquí están los eventos del ciclo de vida resultantes y otros valores de retorno de método importantes:

onPause() onStop() onDestroyView() onDestroy() onDetach() mFragment.getView() == null: true mFragment.getActivity() == null: true

He vuelto a agregar el fragmento aquí

Para separar un Fragmento agregado de una Actividad, usa: getFragmentManager (). BeginTransaction (). Detach (mFragment) .Commit ().

Esto elimina cualquier asociación con una Vista, pero mantiene la asociación con la Actividad.

Aquí están los eventos del ciclo de vida resultantes y otros valores de retorno de método importantes:

onPause() onStop() onDestroyView() mFragment.getView() == null: true mFragment.getActivity() == null: false

Para volver a adjuntar un Fragmento que se separó a la Actividad, se usa: getFragmentManager (). BeginTransaction (). Attach (mFragment) .commit ().

Esto crea una nueva Vista para asociar con el Fragmento y mantiene la asociación de Actividad.

Aquí están los eventos del ciclo de vida resultantes y otros valores de retorno de método importantes:

onCreateView() onViewCreated() onActivityCreated() onViewStateRestored() onStart() onResume() mFragment.getView() == null: false mFragment.getActivity() == null: false

Otras cosas importantes a tener en cuenta: si separa un Fragmento y luego intenta agregarlo de nuevo usando add () en lugar de attach (), nada parece cambiar.

Si intentas agregar un Fragmento que se ha eliminado usando remove () usando attach () en vez de add (), nada parece cambiar.

Cuando getView () devuelve null, el Fragment aún puede tener referencias internas a la última Vista creada. Esta vista ya no es válida y no debe usarse.