ฉันกำลังใช้ไลบรารีความเข้ากันได้ของ Android เพื่อนำแฟรกเมนต์มาใช้และขยายตัวอย่างเลย์เอาต์เพื่อให้แฟรกเมนต์มีปุ่มที่จะดับแฟรกเมนต์อื่น
ในบานหน้าต่างตัวเลือกทางด้านซ้ายผมมี 5 รายการตัวเลือก A B C D E
-
แต่ละโหลดชิ้นส่วน (ผ่านFragmentTransaction:replace
) ในบานหน้าต่างรายละเอียด -a b c d e
ตอนนี้ฉันได้ขยายแฟรกเมนต์e
เพื่อให้มีปุ่มซึ่งโหลดแฟรกเมนต์อื่นขึ้นe1
ในบานหน้าต่างรายละเอียด ฉันทำสิ่งนี้ในe
วิธี onClick ของส่วนดังนี้
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
ft.replace(R.id.details_frag, newFrag);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
ถ้าฉันทำการเลือกต่อไปนี้:
E - e - e1 - D - E
ส่วนนั้นe
อยู่ในบานหน้าต่างรายละเอียด นี่คือสิ่งที่ดีและสิ่งที่ฉันต้องการ อย่างไรก็ตามถ้าฉันกดback
ปุ่ม ณ จุดนี้มันไม่ทำอะไรเลย ฉันต้องคลิกสองครั้งเพราะe1
ยังอยู่ในสแต็ก นอกจากนี้หลังจากคลิกไปรอบ ๆ ฉันได้รับข้อยกเว้นตัวชี้โมฆะใน onCreateView:
หากต้องการ 'แก้ปัญหา' ฉันได้เพิ่มสิ่งต่อไปนี้เมื่อใดก็ตามที่A B C D E
เลือก:
FragmentManager fm = getActivity().getSupportFragmentManager();
for(int i = 0; i < fm.getBackStackEntryCount(); ++i) {
fm.popBackStack();
}
แค่สงสัยว่านี่เป็นทางออกที่ถูกต้องหรือไม่หรือว่าฉันควรจะทำอะไรที่แตกต่างออกไป?