ฉันสงสัยว่านี่เป็นข้อบกพร่องจริง ๆ ใน Android API หรือไม่:
ฉันมีการตั้งค่าเช่นนั้น:
┌----┬---------┐
| | |
| 1 | 2 |
| |┌-------┐|
| || ||
| || 3 ||
└----┴┴-------┴┘
- เป็นเมนูที่โหลดแฟรกเมนต์ # 2 (หน้าจอค้นหา) ในบานหน้าต่างด้านขวา
- เป็นหน้าจอค้นหาที่มีแฟรกเมนต์ # 3 ซึ่งเป็นรายการผลลัพธ์
- รายการผลลัพธ์ถูกใช้ในหลาย ๆ ที่ (รวมทั้งเป็นชิ้นส่วนระดับสูงที่ทำงานได้ในสิทธิ์ของตัวเอง)
ฟังก์ชั่นนี้ใช้งานได้ดีบนโทรศัพท์มือถือ (ในกรณีที่ 1 & 2 และ 3 ActivityFragment
)
อย่างไรก็ตามเมื่อฉันใช้รหัสนี้:
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
Fragment frag = new FragmentNumber2();
if(toLoad != null) frag.setArguments(toLoad);
transaction.replace(R.id.rightPane, frag);
transaction.commit();
ที่ไหนR.id.leftPane
และR.id.rightPane
อยู่<fragment>
ในเค้าโครงเชิงเส้นแนวนอน
มันเป็นความเข้าใจของฉันว่ารหัสข้างต้นลบส่วนที่เป็นถิ่นที่อยู่แล้วแทนที่ด้วยชิ้นส่วนใหม่ ยอดเยี่ยม ... เห็นได้ชัดว่าไม่ใช่สิ่งที่เกิดขึ้นเพราะเมื่อรหัสนี้ทำงานในครั้งที่สองคุณจะได้รับข้อยกเว้นต่อไปนี้:
07-27 15:22:55.940: ERROR/AndroidRuntime(8105): Caused by: java.lang.IllegalArgumentException: Binary XML file line #57: Duplicate id 0x7f080024, tag null, or parent id 0x0 with another fragment for FragmentNumber3
นี่คือสาเหตุเนื่องจากคอนเทนเนอร์สำหรับ FragmentNumber3 ถูกทำซ้ำและไม่มี ID ที่ไม่ซ้ำอีกต่อไป ชิ้นส่วนเริ่มต้นยังไม่ถูกทำลาย (?) ก่อนที่จะเพิ่มชิ้นใหม่ (ในใจของฉันซึ่งหมายความว่าจะไม่ถูกแทนที่ )
มีคนบอกฉันได้ไหมว่าคำตอบนี้เป็นไปได้หรือไม่