Tôi có một đoạn thư viện hỗ trợ gửi cuộc gọi mạng và recreate()
hoạt động gốc khi nhận được phản hồi mạng cụ thể. Tôi có thể thấy rằng hoạt động này được tạo lại vì tôi có thể thấy số onCreate()
và onDestroy()
được gọi.Các mảnh vỡ không bị hủy khi hoạt động recreate()
Nhưng sau khi hoạt động được tạo lại, đoạn vẫn còn đó và nó đã bị mắc kẹt trong một vòng lặp mà tiếp tục tái tạo và tạo ra các đoạn mới.
Dưới đây là một phần của onCreate()
của hoạt động:
if (someLogic()) {
fragmentA = new FragmentA();
FragmentUtil.addFragment(getSupportFragmentManager(), fragmentA);
} else {
fragmentB = new FragmentB();
FragmentUtil.addFragment(getSupportFragmentManager(), fragmentB);
}
FragmentA là một trong những hiện cuộc gọi mạng, và FragmentB là đoạn đó sẽ được hiển thị sau khi recreate()
. Khi tôi kiểm tra danh sách các đoạn với getSupportFragmentManager().getFragments()
Tôi thấy 1 trường hợp FragmentA và 16 phiên bản của FragmentB.
Câu hỏi của tôi là tại sao điều này xảy ra và làm cách nào để khắc phục sự cố?
Bạn có thể cho biết cách thêm các đoạn và tạo lại hoạt động không? Tôi đoán là bạn phải xóa phân đoạnA trước khi khởi động lại hoạt động nhưng tôi sẽ cần xem mã. Btw tại sao bạn không chỉ cần thay thế fragmentA bằng fragmentB thay vì khởi động lại hoạt động? –
Không phải là câu trả lời cụ thể hay là giải pháp lý tưởng nhưng bạn có thể kiểm tra ngăn xếp phân mảnh và chỉ thêm đoạn mới nếu cần, nếu không bạn có thể thay thế/làm mới đoạn hiện tại – zgc7009