การตั้งชื่อวิธีการจัดการแฟรกเมนต์นั้นสับสนมากแม้ตามวิศวกรของ Google ในกระดานข้อความ (ดูความคิดเห็นด้านบน) ฉันได้สาธิตตัวเองเล็กน้อยเพื่อดูว่าสิ่งต่างๆใช้งานได้จริงอย่างไร นี่คือสิ่งที่ฉันค้นพบ อย่าลังเลที่จะแก้ไขฉันถ้าฉันผิด
ในการเพิ่ม Fragment ให้กับกิจกรรมในตอนแรกคุณใช้: getFragmentManager (). beginTransaction (). add (R.id.container, mFragment) .commit ()
สิ่งนี้เชื่อมโยงกิจกรรมกับ Fragment และเชื่อมโยง View กับ Fragment
นี่คือเหตุการณ์วงจรชีวิตที่เป็นผลลัพธ์และค่าการส่งคืนวิธีการที่สำคัญอื่น ๆ :
onAttach()
onCreate()
onCreateView()
onViewCreated()
onActivityCreated()
onViewStateRestored()
onStart()
onResume()
mFragment.getView() == null: false
mFragment.getActivity() == null: false
ในการลบ Fragment ออกจากกิจกรรมให้ใช้: getFragmentManager (). beginTransaction (). remove (mFragment) .commit ()
การดำเนินการนี้จะลบการเชื่อมโยงกับมุมมองหรือกับกิจกรรม
นี่คือเหตุการณ์วงจรชีวิตที่เป็นผลลัพธ์และค่าการส่งคืนวิธีการที่สำคัญอื่น ๆ :
onPause()
onStop()
onDestroyView()
onDestroy()
onDetach()
mFragment.getView() == null: true
mFragment.getActivity() == null: true
ฉันเพิ่มส่วนอีกครั้งที่นี่
ในการแยกส่วนที่เพิ่มออกจากกิจกรรมให้ใช้: getFragmentManager (). beginTransaction (). detach (mFragment) .commit ()
การดำเนินการนี้จะลบการเชื่อมโยงกับมุมมอง แต่ยังคงเชื่อมโยงกับกิจกรรม
นี่คือเหตุการณ์วงจรชีวิตที่เป็นผลลัพธ์และค่าการส่งคืนวิธีการที่สำคัญอื่น ๆ :
onPause()
onStop()
onDestroyView()
mFragment.getView() == null: true
mFragment.getActivity() == null: false
ในการแนบ Fragment ที่แยกออกจาก Activity อีกครั้งให้ใช้: getFragmentManager (). beginTransaction (). attach (mFragment) .commit ()
สิ่งนี้จะสร้างมุมมองใหม่เพื่อเชื่อมโยงกับ Fragment และรักษาการเชื่อมโยงกิจกรรม
นี่คือเหตุการณ์วงจรชีวิตที่เป็นผลลัพธ์และค่าการส่งคืนวิธีการที่สำคัญอื่น ๆ :
onCreateView()
onViewCreated()
onActivityCreated()
onViewStateRestored()
onStart()
onResume()
mFragment.getView() == null: false
mFragment.getActivity() == null: false
สิ่งสำคัญอื่น ๆ ที่ควรทราบ: หากคุณถอด Fragment แล้วลองเพิ่มอีกครั้งโดยใช้ add () แทนที่จะแนบ () ดูเหมือนจะไม่มีอะไรเปลี่ยนแปลง
หากคุณพยายามเพิ่ม Fragment ที่ถูกลบโดยใช้ remove () โดยใช้ attach () แทน add () ดูเหมือนว่าจะไม่มีอะไรเปลี่ยนแปลง
เมื่อ getView () คืนค่า null Fragment อาจยังคงมีการอ้างอิงภายในไปยัง View ล่าสุดที่สร้างขึ้น มุมมองนี้ใช้ไม่ได้อีกต่อไปและไม่ควรใช้
Fragmentเป็นแฝดของมันonPause,onStopและonDestroyViewวิธีการที่เรียกว่าเท่านั้น (ตามลำดับ) ในทางตรงกันข้ามเมื่อFragmentมีการลบออกมันonPause,onStop,onDestroyView,onDestroyและonDetachวิธีการที่เรียกว่า (ตามลำดับ) ในทำนองเดียวกันเมื่อติดที่Fragment'sonCreateView,onStartและonResumeวิธีการที่เรียกว่าเท่านั้น และเมื่อเพิ่มที่Fragment'sonAttach,onCreate,onCreateView,onStartและonResumeวิธีการที่เรียกว่า (ตามลำดับ)