La denominación de los métodos de administración de fragmentos es muy confusa incluso según los ingenieros de Google en los tableros de mensajes (ver comentarios más 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, usa: getFragmentManager(). BeginTransaction(). Add (R.id.container, mFragment) .commit().
Esto asocia la Actividad con el Fragmento y también asocia una Vista con el Fragmento.
Éstos son los eventos del ciclo de vida resultantes y otros valores de retorno método importante:
onAttach()
onCreate()
onCreateView()
onViewCreated()
onActivityCreated()
onViewStateRestored()
onStart()
onResume()
mFragment.getView() == null: false
mFragment.getActivity() == null: false
para eliminar un fragmento de una actividad, que utilice:. getFragmentManager() beginTransaction() quitar (mFragment).. cometer().
Esto elimina cualquier asociación con una Vista o una Actividad.
Éstos son los eventos del ciclo de vida que resultan y otros valores de retorno método importante:
onPause()
onStop()
onDestroyView()
onDestroy()
onDetach()
mFragment.getView() == null: true
mFragment.getActivity() == null: true
que volver a agregar el fragmento aquí
Para separar un fragmento añadido de una actividad, que utilice: getFragmentManager() .beginTransaction(). detach (mFragment) .commit().
Esto elimina cualquier asociación con una Vista, pero mantiene la asociación con la Actividad.
Éstos son los eventos del ciclo de vida resultantes y otros valores método importante de retorno:
onPause()
onStop()
onDestroyView()
mFragment.getView() == null: true
mFragment.getActivity() == null: false
Para volver a colocar un fragmento que fue separado de la actividad, que utilice:. getFragmentManager() BeginTransaction(). attach (mFragment) .commit().
Esto crea una nueva Vista para asociar con el Fragmento y mantiene la asociación de Actividad.
Éstos son los eventos del ciclo de vida resultantes y otros valores de retorno método importante:
onCreateView()
onViewCreated()
onActivityCreated()
onViewStateRestored()
onStart()
onResume()
mFragment.getView() == null: false
mFragment.getActivity() == null: false
otras cosas importantes a tener en cuenta: Si extrae un fragmento y luego intenta agregar de nuevo utilizando add() en lugar de attach(), nada parece cambiar.
si intenta agregar un Fragmento que se ha eliminado con remove() utilizando attach() en lugar de add(), nada parece cambiar.
Cuando getView() devuelve nulo, el fragmento puede tener referencias internas a la última vista creada. Esta vista ya no es válida y no debe usarse.
Para agregar a la respuesta de Rajdeep, observará que cuando un 'Fragment' está _detached_, sus métodos' onPause', 'onStop' y' onDestroyView' se llaman solo (en ese orden). Por otro lado, cuando un 'Fragment' es _removed_, se llaman sus métodos' onPause', 'onStop',' onDestroyView', 'onDestroy' y' onDetach' (en ese orden). De forma similar, cuando _attaching_, los métodos 'onCreateView',' onStart' y 'onResume' del' Fragment' son llamados solamente; y cuando _adding_, los métodos 'onAttach',' onCreate', 'onCreateView',' onStart' y 'onResume' del' Fragment' se llaman (en ese orden). –
Hay una rápida sesión de preguntas y respuestas con Diane Hackborn [aquí] (https://groups.google.com/forum/#!topic/android-platform/QlkLMsncDwg). ¿Por qué tengo [este] (http://stackoverflow.com/questions/18238214/stop-oncreateoptionsmenu-to-belements-from-detached-fragment) log? ¿Cómo sabes que se ha llamado a FT.detach()? – Poutrathor
¿Cuál es el beneficio de uno sobre el otro? Quiero saber un caso de uso cuando uno es favorable sobre el otro? Siempre agrego y elimino, ¿es malo? –