Việc đặt tên của các phương pháp quản lý phân đoạn rất khó hiểu ngay cả theo các kỹ sư của Google trên bảng tin (xem 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ự hiệu quả. Đây là những phát hiện của tôi. Vui lòng sửa tôi nếu tôi sai.
Để bước đầu thêm Phân đoạn vào hoạt động, bạn sử dụng: getFragmentManager(). StartsTransaction(). Thêm (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à kết quả các sự kiện chu kỳ sống và giá trị trả về phương pháp 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 từ một hoạt động, bạn sử dụng:. getFragmentManager() beginTransaction() loại bỏ (mFragment).. commit().
Thao tác này sẽ xóa mọi liên kết bằng Chế độ xem hoặc vào Hoạt động.
Dưới đây là kết quả các sự kiện chu kỳ sống và giá trị trả về phương pháp quan trọng khác:
onPause()
onStop()
onDestroyView()
onDestroy()
onDetach()
mFragment.getView() == null: true
mFragment.getActivity() == null: true
tôi lại thêm đoạn ở đây
Để tách một Fragment thêm từ một hoạt động, bạn sử dụng: getFragmentManager() .beginTransaction(). detach (mFragment) .commit().
Thao tác này sẽ xóa mọi liên kết bằng Chế độ xem nhưng giữ liên kết với Hoạt động.
Dưới đây là kết quả các sự kiện chu kỳ sống và các giá trị khác phương pháp quan trọng trở lại:
onPause()
onStop()
onDestroyView()
mFragment.getView() == null: true
mFragment.getActivity() == null: false
Để lại đính kèm một Fragment đã được tách ra để hoạt động, bạn sử dụng:. getFragmentManager() beginTransaction(). đính kèm (mFragment) .commit().
Điều này tạo Chế độ xem mới để liên kết với Phân đoạn và duy trì liên kết Hoạt động.
Dưới đây là kết quả các sự kiện chu kỳ sống và giá trị trả về phương pháp quan trọng khác:
onCreateView()
onViewCreated()
onActivityCreated()
onViewStateRestored()
onStart()
onResume()
mFragment.getView() == null: false
mFragment.getActivity() == null: false
đ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 một lần nữa sử dụng thêm() chứ không phải là đính kèm(), dường như không có gì thay đổi.
nếu bạn cố gắng thêm Phân đoạn đã bị xóa bằng cách sử dụ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, Phân đoạn có thể vẫn có tham chiếu nội bộ cho Chế độ xem cuối cùng được tạo. Chế độ xem này không còn giá trị và không được sử dụng.
Để thêm vào câu trả lời của Rajdeep, bạn sẽ nhận thấy rằng khi 'Phân đoạn' là _detached_, các phương thức' onPause', 'onStop' và' onDestroyView' chỉ được gọi (theo thứ tự đó). Mặt khác, khi 'Fragment' là _removed_, các phương thức' onPause', 'onStop',' onDestroyView', 'onDestroy' và' onDetach' được gọi (theo thứ tự đó). Tương tự, khi _attaching_, các phương thức 'onCreateView',' onStart' và 'onResume' của' Fragment' chỉ được gọi; và khi _adding_, các phương thức 'onAttach',' onCreate', 'onCreateView',' onStart' và 'onResume' của' Fragment' được gọi (theo thứ tự đó). –
Có một phần hỏi đáp nhanh với Diane Hackborn [ở đây] (https://groups.google.com/forum/#!topic/android-platform/QlkLMsncDwg). Vậy tại sao tôi có nhật ký [this] (http://stackoverflow.com/questions/18238214/stop-oncreateoptionsmenu-to-be-called-from-detached-fragment)? Làm thế nào để bạn biết rằng FT.detach() đã được gọi? – Poutrathor
Whats lợi ích của cái này qua cái kia? Tôi muốn biết một trường hợp sử dụng khi một trong những thuận lợi hơn khác? Tôi luôn thêm và xóa, có tệ không? –