Đây là giải pháp rất đơn giản cho SupportFragmentManager
. FragmentManager
không phải là khá thuận tiện, nhưng vẫn hiệu quả:
List<Fragment> fragmentList = getSupportFragmentManager().getFragments();
// You might have to access all the fragments by their tag,
// in which case just follow the line below to remove the fragment
if (fragmentList == null) {
// code that handles no existing fragments
}
for (Fragment frag : fragmentList)
{
// To save any of the fragments, add this check
// a tag can be added as a third parameter to the fragment when you commit it
if (frag.getTag().equals("<tag-name")) {
continue;
}
getSupportFragmentManager().beginTransaction().remove(frag).commit();
}
hoặc, nếu bạn buộc phải sử dụng nó (nhưng không khuyến khích):
.commitAllowingStateLoss();
Nếu bạn đang loại bỏ tất cả các mảnh vỡ từ chế độ xem nhiều lần, bạn có thể xem xét kiểm tra xem phân đoạn hiện tại có là null hay isDetached()
hoặc isRemoving()
hoặc bạn có thể nhận được NullPointerExceptions
.
Update 6-9-15: Các tài liệu cho getSupportFragmentManger().getFragments()
là rõ ràng hidden bây giờ, nhưng vẫn hoạt động tốt trong mã của tôi. Dưới đây là ảnh chụp màn hình của tài liệu:
Update 8-3-15: Nếu bạn không sử dụng các thư viện hỗ trợ cho các mảnh vỡ, đáng tiếc là không có getFragments()
sẵn, nhưng vẫn có một vài , các tùy chọn bất tiện hơn.
- Cho mỗi
fragment
một tag
hoặc id
khi tạo, và lặp qua chúng để xử lý mỗi fragment
như mong muốn.
- Tạo người nghe sử dụng
onAttachListener
để mỗi lần fragment
mới được gắn vào activity
, bạn có thể lưu trữ fragment
đó, sau đó lặp qua cấu trúc dữ liệu đó để xử lý mỗi fragment
như mong muốn.
Khi không sử dụng getSupportFragmentManager()
, để xử lý giao dịch bạn cần sử dụng getFragmentManager()
thay thế.
Bạn có thể cung cấp liên kết đến phương thức 'getFragments()' không? –
@IvanBlack, dường như không có liên kết nào khả dụng. Tôi tự tin rằng tài liệu đã có sẵn cho nó khi tôi viết bài này, nhưng API cho thấy nó đã ẩn, nó vẫn hoạt động. – craned