Mi chiedo se questo sia effettivamente un bug nell'API di Android:
Ho un setup in questo modo:
┌----┬---------┐
| | |
| 1 | 2 |
| |┌-------┐|
| || ||
| || 3 ||
└----┴┴-------┴┘
- È un menu che carica il frammento n. 2 (una schermata di ricerca) nel riquadro di destra.
- È una schermata di ricerca che contiene il frammento n. 3, che è un elenco di risultati.
- L'elenco dei risultati viene utilizzato in diversi punti (incluso come frammento di alto livello funzionante a sé stante).
Questa funzionalità funziona perfettamente su un telefono (dove 1, 2 e 3 sono ActivityFragment
).
Tuttavia, quando ho usato questo codice:
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
Fragment frag = new FragmentNumber2();
if(toLoad != null) frag.setArguments(toLoad);
transaction.replace(R.id.rightPane, frag);
transaction.commit();
Dove R.id.leftPane
e R.id.rightPane
sono <fragment>
s in un layout lineare orizzontale.
Comprendo che il codice sopra rimuove il frammento residente e lo sostituisce con un nuovo frammento. Brillante ... Ovviamente non è quello che succede perché quando questo codice viene eseguito la seconda volta si ottiene la seguente eccezione:
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
Ciò è causato dal fatto che il contenitore per FragmentNumber3 è stato duplicato e non ha più un ID univoco. Il frammento iniziale non è stato distrutto (?) Prima di aggiungerne uno nuovo (nella mia mente ciò significa che non è stato sostituito ).
Qualcuno può dirmi se questo è possibile ( questa risposta suggerisce che non lo è) o è un bug?