La denominación de los métodos de gestión de fragmentos es muy confusa incluso según los ingenieros de Google en los foros de mensajes (consulte los comentarios anteriores). Hice una pequeña demostración para descubrir cómo funcionan las cosas. Estos son mis hallazgos. Siéntete libre de corregirme si me equivoco.
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.
Estos son los eventos de ciclo de vida resultantes y otros valores de retorno de métodos importantes:
onAttach()
onCreate()
onCreateView()
onViewCreated()
onActivityCreated()
onViewStateRestored()
onStart()
onResume()
mFragment.getView() == null: false
mFragment.getActivity() == null: false
Para eliminar un Fragmento de una Actividad, usa: getFragmentManager (). BeginTransaction (). Remove (mFragment) .commit ().
Esto elimina cualquier asociación con una vista o una actividad.
Estos son los eventos de ciclo de vida resultantes y otros valores de retorno de métodos importantes:
onPause()
onStop()
onDestroyView()
onDestroy()
onDetach()
mFragment.getView() == null: true
mFragment.getActivity() == null: true
Volví a agregar el fragmento aquí
Para separar un Fragmento agregado de una Actividad, use: getFragmentManager (). BeginTransaction (). Detach (mFragment) .commit ().
Esto elimina cualquier asociación con una Vista, pero mantiene la asociación con la Actividad.
Estos son los eventos de ciclo de vida resultantes y otros valores de retorno de métodos importantes:
onPause()
onStop()
onDestroyView()
mFragment.getView() == null: true
mFragment.getActivity() == null: false
Para volver a adjuntar un Fragmento que se separó de la Actividad, use: getFragmentManager (). BeginTransaction (). Attach (mFragment) .commit ().
Esto crea una nueva Vista para asociar con el Fragmento y mantiene la asociación Actividad.
Estos son los eventos de ciclo de vida resultantes y otros valores de retorno de métodos 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 nuevamente usando add () en lugar de adjuntar (), nada parece cambiar.
si intenta agregar un Fragmento que ha sido eliminado usando remove () usando attach () en lugar de add (), nada parece cambiar.
Cuando getView () devuelve nulo, es posible que el Fragmento aún tenga referencias internas a la última Vista que creó. Esta vista ya no es válida y no debe usarse.
Fragmentestá desprendido , susonPause,onStopyonDestroyViewmétodos se llaman solamente (en ese orden). Por otro lado, cuando unFragmentse retira , susonPause,onStop,onDestroyView,onDestroyyonDetachmétodos se llaman (en ese orden). Del mismo modo, cuando la fijación , losFragment'sonCreateView,onStartyonResumemétodos se denominan solamente; y cuando la adición de , losFragment'sonAttach,onCreate,onCreateView,onStartyonResumemétodos se llaman (en ese orden).