La denominazione dei metodi di gestione dei frammenti è molto confusa anche secondo gli ingegneri di Google sulle bacheche (vedi commenti sopra). Mi sono fatto una piccola demo per capire come funzionano effettivamente le cose. Ecco le mie scoperte. Sentiti libero di correggermi se sbaglio.
Per aggiungere inizialmente un frammento a un'attività, utilizzare: getFragmentManager (). BeginTransaction (). Add (R.id.container, mFragment) .commit ().
Questo associa l'attività al frammento e associa anche una vista al frammento.
Di seguito sono riportati gli eventi del ciclo di vita risultanti e altri importanti valori restituiti dal metodo:
onAttach()
onCreate()
onCreateView()
onViewCreated()
onActivityCreated()
onViewStateRestored()
onStart()
onResume()
mFragment.getView() == null: false
mFragment.getActivity() == null: false
Per rimuovere un frammento da un'attività, utilizzare: getFragmentManager (). BeginTransaction (). Remove (mFragment) .commit ().
Ciò rimuove qualsiasi associazione con una vista o un'attività.
Di seguito sono riportati gli eventi del ciclo di vita risultanti e altri importanti valori restituiti dal metodo:
onPause()
onStop()
onDestroyView()
onDestroy()
onDetach()
mFragment.getView() == null: true
mFragment.getActivity() == null: true
Ho aggiunto nuovamente il frammento qui
Per scollegare un frammento aggiunto da un'attività, utilizzare: getFragmentManager (). BeginTransaction (). Detach (mFragment) .commit ().
Ciò rimuove qualsiasi associazione con una vista, ma mantiene l'associazione con l'attività.
Di seguito sono riportati gli eventi del ciclo di vita risultanti e altri importanti valori restituiti dal metodo:
onPause()
onStop()
onDestroyView()
mFragment.getView() == null: true
mFragment.getActivity() == null: false
Per ricollegare un frammento che è stato scollegato all'attività, utilizzare: getFragmentManager (). BeginTransaction (). Attach (mFragment) .commit ().
Questo crea una nuova vista da associare al frammento e mantiene l'associazione dell'attività.
Di seguito sono riportati gli eventi del ciclo di vita risultanti e altri importanti valori restituiti dal metodo:
onCreateView()
onViewCreated()
onActivityCreated()
onViewStateRestored()
onStart()
onResume()
mFragment.getView() == null: false
mFragment.getActivity() == null: false
Altre cose importanti da notare: se scolleghi un frammento e poi provi ad aggiungerlo di nuovo usando add () invece di attach (), nulla sembra cambiare.
se si tenta di aggiungere un frammento che è stato rimosso utilizzando remove () utilizzando attach () invece di add (), non sembra cambiare nulla.
Quando getView () restituisce null, il frammento potrebbe ancora avere riferimenti interni all'ultima vista creata. Questa visualizzazione non è più valida e non deve essere utilizzata.
Fragment
è distaccato , le sueonPause
,onStop
eonDestroyView
metodi vengono chiamati solo (in questo ordine). D'altra parte, quando unaFragment
viene rimosso , le sueonPause
,onStop
,onDestroyView
,onDestroy
eonDetach
metodi vengono chiamati (in questo ordine). Analogamente, quando il fissaggio , iFragment
'sonCreateView
,onStart
eonResume
metodi vengono chiamati solo; e quando l'aggiunta , iFragment
'sonAttach
,onCreate
,onCreateView
,onStart
eonResume
metodi vengono chiamati (in questo ordine).