मैं सोच रहा था कि क्या यह वास्तव में Android API में एक बग है:
मेरे पास ऐसा सेटअप है:
┌----┬---------┐
| | |
| 1 | 2 |
| |┌-------┐|
| || ||
| || 3 ||
└----┴┴-------┴┘
- एक मेनू है जो दाहिने फलक में खंड 2 (A खोज स्क्रीन) लोड करता है।
- एक खोज स्क्रीन है जिसमें # 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 के लिए कंटेनर को डुप्लिकेट किया गया है और इसमें अब एक विशिष्ट आईडी नहीं है। आरंभिक फ्रैगमेंट को नष्ट नहीं किया गया है (?) इससे पहले कि नया जोड़ा जाए (मेरे दिमाग में) इसका मतलब यह नहीं है प्रतिस्थापित गया है )।
क्या कोई मुझे बता सकता है कि क्या यह संभव है ( यह उत्तर बताता है कि यह नहीं है) या यह एक बग है?