Penamaan metode manajemen fragmen sangat membingungkan bahkan menurut teknisi Google di papan pesan (lihat komentar di atas). Saya membuat sendiri demo kecil untuk mencari tahu cara kerja sebenarnya. Inilah temuan saya. Jangan ragu untuk mengoreksi saya jika saya salah.
Untuk awalnya menambahkan Fragmen ke Aktivitas, Anda menggunakan: getFragmentManager (). BeginTransaction (). Add (R.id.container, mFragment) .commit ().
Ini mengaitkan Aktivitas dengan Fragmen dan juga mengaitkan Tampilan dengan Fragmen.
Berikut adalah peristiwa siklus hidup yang dihasilkan dan nilai pengembalian metode penting lainnya:
onAttach()
onCreate()
onCreateView()
onViewCreated()
onActivityCreated()
onViewStateRestored()
onStart()
onResume()
mFragment.getView() == null: false
mFragment.getActivity() == null: false
Untuk menghapus Fragmen dari Aktivitas, Anda menggunakan: getFragmentManager (). BeginTransaction (). Remove (mFragment) .commit ().
Ini menghapus asosiasi apa pun dengan Tampilan atau Aktivitas.
Berikut adalah peristiwa siklus hidup yang dihasilkan dan nilai pengembalian metode penting lainnya:
onPause()
onStop()
onDestroyView()
onDestroy()
onDetach()
mFragment.getView() == null: true
mFragment.getActivity() == null: true
Saya menambahkan kembali fragmen di sini
Untuk melepaskan Fragmen tambahan dari sebuah Aktivitas, Anda menggunakan: getFragmentManager (). BeginTransaction (). Detach (mFragment) .commit ().
Ini menghapus asosiasi apa pun dengan Tampilan, tetapi tetap mengaitkannya dengan Aktivitas.
Berikut adalah peristiwa siklus hidup yang dihasilkan dan nilai pengembalian metode penting lainnya:
onPause()
onStop()
onDestroyView()
mFragment.getView() == null: true
mFragment.getActivity() == null: false
Untuk memasang kembali Fragmen yang telah dilepas ke Aktivitas, Anda menggunakan: getFragmentManager (). BeginTransaction (). Attach (mFragment) .commit ().
Ini membuat Tampilan baru untuk dikaitkan dengan Fragmen dan mempertahankan asosiasi Aktivitas.
Berikut adalah peristiwa siklus hidup yang dihasilkan dan nilai pengembalian metode penting lainnya:
onCreateView()
onViewCreated()
onActivityCreated()
onViewStateRestored()
onStart()
onResume()
mFragment.getView() == null: false
mFragment.getActivity() == null: false
Hal penting lainnya yang perlu diperhatikan: Jika Anda melepaskan Fragmen lalu mencoba menambahkannya lagi menggunakan add () daripada melampirkan (), sepertinya tidak ada yang berubah.
jika Anda mencoba menambahkan Fragmen yang telah dihapus menggunakan remove () dengan menggunakan attach () daripada add (), tidak ada yang berubah.
Saat getView () mengembalikan null, Fragmen mungkin masih memiliki referensi internal ke Tampilan terakhir yang dibuatnya. Tampilan ini tidak lagi valid dan tidak boleh digunakan.
Fragment
sedang terpisah , yangonPause
,onStop
danonDestroyView
metode dipanggil hanya (dalam urutan itu). Di sisi lain, ketikaFragment
sedang dihapus , yangonPause
,onStop
,onDestroyView
,onDestroy
danonDetach
metode yang disebut (dalam urutan itu). Demikian pula, saat melampirkan ,Fragment
'sonCreateView
,onStart
danonResume
metode hanya dipanggil; dan ketika menambahkan , paraFragment
'sonAttach
,onCreate
,onCreateView
,onStart
danonResume
metode yang disebut (dalam urutan itu).