Làm cách nào để bật lại ngăn xếp cho Hoạt động với nhiều Phân đoạn?
Giả sử tôi có một Hoạt động, trong đó có hai FrameLayouts (chúng ta hãy gọi chúng FrameA và FrameB) mà lần lượt mỗi chứa một Fragment (chúng ta hãy gọi chúng FragmentA1 và FragmentB1 tương ứng). Bây giờ, tôi cam kết một loạt các giao dịch đoạn cá nhân sử dụng mã tương tự như sau ...
getFragmentManager()
.beginTransaction()
.replace(frameId, fragment)
.addToBackStack(null)
.commit();
... như vậy mà tôi thay thế FragmentA1 trong FrameA với FragmentA2, sau đó tôi thay FragmentB1 trong FrameB với FragmentB2, sau đó tôi thay thế FragmentA2 trong FrameA bằng FragmentA3, sau đó tôi thay thế FragmentB2 trong Frame2 bằng FragmentB3 và trạng thái cuối cùng trông giống như hình bên trên (nơi chỉ có FragmentA3 và FragmentB3 được hiển thị).
Nếu tôi hiểu chính xác cách ngăn xếp hoạt động trở lại, nhấn 'quay lại' sẽ xen kẽ các mảnh vỡ giữa FrameA và FrameB (phản ánh cách tôi thêm chúng).
Có ai biết liệu có thể bật giao dịch cuối cùng trên FrameA hoặc FrameB một cách chọn lọc không? (Ví dụ: nếu tôi ép 'Pop FrameA' sau đó FrameA sẽ được chuyển trở lại từ FragmentA3 để FragmentA2 và, thay vào đó, nếu tôi ép 'Pop FrameB' sau đó FrameB sẽ được chuyển trở lại từ FragmentB3 để FragmentB2)
bổ sung: Tôi biết tôi có thể nhận được Fragment được thêm lần cuối vào FrameLayout đã cho bằng cách sử dụng phương thức
FragmentManager.findFragmentById(int framelayoutId)
, nhưng gọiFragmentTransaction.remove(fragment).commit()
chỉ xóa Fragment khỏi Chế độ xem và không chuyển View trở lại Fragment được hiển thị trước đó.
Nếu FragmentTransaction.remove "chỉ loại bỏ các Fragment từ Xem và không chuyển tiếp các chế độ xem", sau đó những gì đang hiển thị trong quan điểm? Nhưng tôi có thể thấy lý do tại sao điều này có thể gây nhầm lẫn nếu Mgr giữ một chồng các mảnh nhưng không biết cái nào được nhìn thấy đồng thời, tức là làm sao nó biết rằng A2 là "bên dưới" A3 khi B2 có thể nằm giữa chúng trên cây rơm? – gordonwd
Nếu một khung nhìn (FrameLayout trong trường hợp của tôi) đã có nhiều Fragments được thêm vào nó bằng phương thức 'FragmentTransaction.add (int, Fragment)', sau đó gọi 'FragmentTransaction.remove (Fragment) .commit()' Tôi tin rằng sẽ rời khỏi FrameLayout hiển thị Fragment được thêm vào cuối cùng. Tuy nhiên, thêm Fragments vào View bằng cách sử dụng phương thức 'FragmentTransaction.replace (int, Fragment)' (như tôi đang làm, giả sử điều này tốt hơn cho bộ nhớ ?!) sẽ để lại FrameLayout con-less (tức là hiển thị dưới dạng View rỗng) ... –
Để thêm vào nhận xét trước của tôi: Tôi có thể thấy rằng có một số phương pháp hữu ích như 'FragmentManager.getBackStackEntryAt (int index)', 'FragmentManager.popBackStack (Tên chuỗi, cờ int) ',' popBackStack (int id, int flags) ',' FragmentTransaction.addToBackStack (Tên chuỗi) 'và' FragmentTransaction.replace (int containerViewId, Fragment fragment, String tag) ', không chắc chắn làm thế nào để hồ bơi chúng lại với nhau để đạt được những gì tôi yêu cầu ... –