A nomenclatura dos métodos de gerenciamento de fragmentos é muito confusa, mesmo de acordo com os engenheiros do Google em painéis de mensagens (veja os comentários acima). Eu fiz uma pequena demonstração para descobrir como as coisas realmente funcionam. Aqui estão minhas descobertas. Sinta-se à vontade para me corrigir se eu estiver errado.
Para adicionar inicialmente um fragmento a uma atividade, você usa: getFragmentManager (). BeginTransaction (). Add (R.id.container, mFragment) .commit ().
Isso associa a Atividade ao Fragmento e também associa uma Visualização ao Fragmento.
Aqui estão os eventos de ciclo de vida resultantes e outros valores de retorno de método importantes:
onAttach()
onCreate()
onCreateView()
onViewCreated()
onActivityCreated()
onViewStateRestored()
onStart()
onResume()
mFragment.getView() == null: false
mFragment.getActivity() == null: false
Para remover um fragmento de uma atividade, você usa: getFragmentManager (). BeginTransaction (). Remove (mFragment) .commit ().
Isso remove qualquer associação com uma Visualização ou Atividade.
Aqui estão os eventos de ciclo de vida resultantes e outros valores de retorno de método importantes:
onPause()
onStop()
onDestroyView()
onDestroy()
onDetach()
mFragment.getView() == null: true
mFragment.getActivity() == null: true
Eu readicionei o fragmento aqui
Para desanexar um Fragment adicionado de uma Activity, você usa: getFragmentManager (). BeginTransaction (). Detach (mFragment) .commit ().
Isso remove qualquer associação com uma Visualização, mas mantém a associação com a Atividade.
Aqui estão os eventos de ciclo de vida resultantes e outros valores de retorno de método importantes:
onPause()
onStop()
onDestroyView()
mFragment.getView() == null: true
mFragment.getActivity() == null: false
Para anexar novamente um Fragment que foi desanexado à Activity, você usa: getFragmentManager (). BeginTransaction (). Attach (mFragment) .commit ().
Isso cria uma nova View para associar ao Fragment e mantém a associação Activity.
Aqui estão os eventos de ciclo de vida resultantes e outros valores de retorno de método importantes:
onCreateView()
onViewCreated()
onActivityCreated()
onViewStateRestored()
onStart()
onResume()
mFragment.getView() == null: false
mFragment.getActivity() == null: false
Outras coisas importantes a serem observadas: Se você desanexar um Fragmento e tentar adicioná-lo novamente usando add () em vez de attach (), nada parece mudar.
se você tentar adicionar um fragmento que foi removido usando remove () usando attach () ao invés de add (), nada parece mudar.
Quando getView () retorna null, o Fragment ainda pode ter referências internas para a última View que ele criou. Esta visualização não é mais válida e não deve ser usada.
Fragment
é destacado , seusonPause
,onStop
eonDestroyView
métodos são chamados apenas (nessa ordem). Por outro lado, quando umFragment
é removido , seusonPause
,onStop
,onDestroyView
,onDestroy
eonDetach
métodos são chamadas (por essa ordem). Da mesma forma, quando anexando , osFragment
'sonCreateView
,onStart
eonResume
métodos são chamados apenas; e quando a adição , osFragment
'sonAttach
,onCreate
,onCreateView
,onStart
eonResume
métodos são chamadas (por essa ordem).