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.
Fragment
está desprendido , susonPause
,onStop
yonDestroyView
métodos se llaman solamente (en ese orden). Por otro lado, cuando unFragment
se retira , susonPause
,onStop
,onDestroyView
,onDestroy
yonDetach
métodos se llaman (en ese orden). Del mismo modo, cuando la fijación , losFragment
'sonCreateView
,onStart
yonResume
métodos se denominan solamente; y cuando la adición de , losFragment
'sonAttach
,onCreate
,onCreateView
,onStart
yonResume
métodos se llaman (en ese orden).