Ich frage mich, ob dies tatsächlich ein Fehler in der Android-API ist:
Ich habe ein Setup wie folgt:
┌----┬---------┐
| | |
| 1 | 2 |
| |┌-------┐|
| || ||
| || 3 ||
└----┴┴-------┴┘
- Ist ein Menü, das Fragment Nr. 2 (Ein Suchbildschirm) im rechten Bereich lädt.
- Ist ein Suchbildschirm, der Fragment Nr. 3 enthält, bei dem es sich um eine Ergebnisliste handelt.
- Die Ergebnisliste wird an mehreren Stellen verwendet (auch als eigenständiges funktionierendes Fragment auf hoher Ebene).
Diese Funktionalität funktioniert perfekt auf einem Telefon (wobei 1 & 2 und 3 ActivityFragment
s sind).
Als ich diesen Code verwendete:
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
Fragment frag = new FragmentNumber2();
if(toLoad != null) frag.setArguments(toLoad);
transaction.replace(R.id.rightPane, frag);
transaction.commit();
Wo R.id.leftPane
und R.id.rightPane
sind <fragment>
s in einem horizontalen linearen Layout.
Nach meinem Verständnis entfernt der obige Code das residente Fragment und ersetzt es dann durch ein neues Fragment. Genial ... Offensichtlich passiert das nicht, denn wenn dieser Code das zweite Mal ausgeführt wird, tritt die folgende Ausnahme auf:
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
Dies liegt daran, dass der Container für FragmentNumber3 dupliziert wurde und keine eindeutige ID mehr hat. Das ursprüngliche Fragment wurde nicht zerstört (?), Bevor das neue hinzugefügt wurde (meiner Meinung nach bedeutet dies, dass es nicht ersetzt wurde ).
Kann mir jemand sagen, ob dies möglich ist ( diese Antwort deutet darauf hin, dass dies nicht der Fall ist) oder ob es sich um einen Fehler handelt?