Tôi chỉ muốn thêm: -
Xuất hiện từ backstack bằng cách sử dụng sau
FragmentManager.popBackStack ()
chỉ là về việc loại bỏ các mảnh khỏi giao dịch, không có cách nào để loại bỏ các mảnh khỏi màn hình. Rất lý tưởng, nó có thể không hiển thị với bạn nhưng có thể có hai hoặc ba mảnh được xếp chồng lên nhau và trên phím quay lại, giao diện người dùng có thể trông lộn xộn, xếp chồng lên nhau.
Chỉ lấy một ví dụ đơn giản: -
Giả sử bạn có một đoạnA tải Fragmnet B bằng cách sử dụng Fragmentmanager.replace () và sau đó chúng tôi thực hiện addToBackStack, để lưu giao dịch này. Vì vậy, dòng chảy là: -
BƯỚC 1 -> FragmentA-> FragmentB (chúng tôi đã chuyển sang FragmentB, nhưng Fragment A ở chế độ nền, không hiển thị).
Bây giờ Bạn thực hiện một số công việc trong phân đoạnB và nhấn nút Lưu mà sau khi lưu sẽ quay lại phân đoạnA.
BƯỚC 2-> Khi lưu FragmentB, chúng tôi quay lại FragmentA.
BƯỚC 3 -> Vì vậy, lỗi phổ biến sẽ là ... trong Đoạn B, chúng tôi sẽ thực hiện phân đoạn Manager.replace () FragmentB với FragmentA.
Nhưng những gì thực sự đang xảy ra, chúng tôi đang tải lại Fragment A, thay thế FragmentB. Vì vậy, bây giờ có hai FragmentA (một từ BƯỚC-1 và một từ BƯỚC-3).
Hai trường hợp của FragmentsA được xếp chồng lên nhau, có thể không nhìn thấy được, nhưng nó ở đó.
Vì vậy, ngay cả khi chúng tôi xóa backstack bằng các phương thức trên, giao dịch sẽ bị xóa nhưng không phải là các mảnh thực tế. Vì vậy, lý tưởng trong trường hợp cụ thể như vậy, khi nhấn nút lưu, bạn chỉ cần quay lại FragmentA bằng cách thực hiện fm.popBackStack () hoặc fm.popBackImmediate () .
Vì vậy, sửa Step3-> fm.popBackStack () trở lại FragmentA, đã có trong bộ nhớ.