Cách đặt tên của các phương pháp quản lý phân mảnh rất khó hiểu ngay cả theo các kỹ sư của Google trên bảng tin (xem các bình luận ở trên). Tôi đã tự làm một bản demo nhỏ để tìm ra cách mọi thứ thực sự hoạt động. Đây là những phát hiện của tôi. Hãy sửa cho tôi nếu tôi sai.
Để thêm một Fragment vào Activity lúc đầu, bạn sử dụng: getFragmentManager (). BeginTransaction (). Add (R.id.container, mFragment) .commit ().
Điều này liên kết Hoạt động với Phân đoạn và cũng liên kết Chế độ xem với Phân đoạn.
Dưới đây là các sự kiện kết quả trong vòng đời và các giá trị trả về phương thức quan trọng khác:
onAttach()
onCreate()
onCreateView()
onViewCreated()
onActivityCreated()
onViewStateRestored()
onStart()
onResume()
mFragment.getView() == null: false
mFragment.getActivity() == null: false
Để loại bỏ một Fragment khỏi Activity, bạn sử dụng: getFragmentManager (). BeginTransaction (). Remove (mFragment) .commit ().
Thao tác này sẽ xóa mọi liên kết với Chế độ xem hoặc với Hoạt động.
Dưới đây là các sự kiện kết quả trong vòng đời và các giá trị trả về phương thức quan trọng khác:
onPause()
onStop()
onDestroyView()
onDestroy()
onDetach()
mFragment.getView() == null: true
mFragment.getActivity() == null: true
Tôi đã thêm lại đoạn ở đây
Để tách một Fragment đã thêm khỏi một Activity, bạn sử dụng: getFragmentManager (). BeginTransaction (). Detach (mFragment) .commit ().
Thao tác này sẽ xóa mọi liên kết với Chế độ xem, nhưng vẫn giữ liên kết với Hoạt động.
Dưới đây là các sự kiện kết quả trong vòng đời và các giá trị trả về phương thức quan trọng khác:
onPause()
onStop()
onDestroyView()
mFragment.getView() == null: true
mFragment.getActivity() == null: false
Để đính kèm lại một Fragment đã được tách ra khỏi Activity, bạn sử dụng: getFragmentManager (). BeginTransaction (). Attachment (mFragment) .commit ().
Điều này tạo ra một View mới để liên kết với Fragment và duy trì liên kết Activity.
Dưới đây là các sự kiện kết quả trong vòng đời và các giá trị trả về phương thức quan trọng khác:
onCreateView()
onViewCreated()
onActivityCreated()
onViewStateRestored()
onStart()
onResume()
mFragment.getView() == null: false
mFragment.getActivity() == null: false
Những điều quan trọng khác cần lưu ý: Nếu bạn tách một Fragment và sau đó cố gắng thêm lại nó bằng add () thay vì đính kèm (), dường như không có gì thay đổi.
nếu bạn cố gắng thêm một Fragment đã bị xóa bằng remove () bằng cách sử dụng Attach () thay vì add (), dường như không có gì thay đổi.
Khi getView () trả về null, Fragment vẫn có thể có các tham chiếu nội bộ đến View cuối cùng mà nó đã tạo. Chế độ xem này không còn hợp lệ và không nên được sử dụng.
Fragment
được tách raonPause
,onStop
vàonDestroyView
các phương thức của nó chỉ được gọi (theo thứ tự đó). Mặt khác, khi mộtFragment
được loại bỏ , nóonPause
,onStop
,onDestroyView
,onDestroy
vàonDetach
phương pháp này được gọi là (theo thứ tự đó). Tương tự như vậy, khi gắn , cácFragment
'sonCreateView
,onStart
vàonResume
phương pháp chỉ được gọi là; và khi thêm , cácFragment
'sonAttach
,onCreate
,onCreateView
,onStart
vàonResume
phương pháp này được gọi là (theo thứ tự đó).