ฉันแค่อยากจะเพิ่ม: -
โผล่ออกมาจากแบ็คสแต็คโดยใช้ดังต่อไปนี้
fragmentManager.popBackStack ()
เป็นเพียงการลบแฟรกเมนต์ออกจากธุรกรรมไม่มีทางที่จะลบแฟรกเมนต์ออกจากหน้าจอ ดังนั้นอาจไม่สามารถมองเห็นคุณได้ แต่อาจมีสองหรือสามชิ้นซ้อนกันและกดปุ่มย้อนกลับ UI อาจดูรกซ้อนกัน
แค่ยกตัวอย่างง่ายๆ: -
สมมติว่าคุณมี FragmentA ซึ่งโหลด Fragmnet B โดยใช้Fragmentmanager.replace ()จากนั้นเราเพิ่ม addToBackStack เพื่อบันทึกธุรกรรมนี้ ดังนั้นการไหลคือ: -
ขั้นตอนที่ 1 -> FragmentA-> FragmentB (เราย้ายไปที่ FragmentB แต่ Fragment A อยู่ในพื้นหลังไม่สามารถมองเห็นได้)
ตอนนี้คุณทำงานชิ้นส่วน B แล้วกดปุ่มบันทึกซึ่งหลังจากบันทึกแล้วควรกลับไปที่ชิ้นส่วน A
ขั้นตอนที่ 2-> เมื่อบันทึก FragmentB เรากลับไปที่ FragmentA
ขั้นตอนที่ 3 -> ความผิดพลาดที่พบบ่อยคือ ... ใน Fragment B เราจะทำการแยกส่วน Manager.replace () fragmentB ด้วย FragmentA
แต่สิ่งที่เกิดขึ้นจริงเรากำลังโหลด Fragment A อีกครั้งแทนที่ FragmentB ตอนนี้มี FragmentA สองอัน (อันจาก STEP-1 และอีกอันจาก STEP-3)
อินสแตนซ์ของ FragmentsA สองรายการซ้อนกันซึ่งอาจมองไม่เห็น แต่มีอยู่
ดังนั้นแม้ว่าเราจะล้าง backstack ด้วยวิธีการข้างต้น แต่การทำธุรกรรมจะถูกล้าง แต่ไม่ใช่เศษที่เกิดขึ้นจริง ดังนั้นในกรณีพิเศษโดยเฉพาะเมื่อกดปุ่มบันทึกคุณเพียงแค่ต้องกลับไปที่ FragmentA โดยทำfm.popBackStack ()หรือfm.popBackImmediate ()()
ดังนั้นแก้ไข Step3-> fm.popBackStack () กลับไปที่ fragmentA ซึ่งมีอยู่ในหน่วยความจำแล้ว