Je me demande si c'est réellement un bug dans l'API Android:
J'ai une configuration comme suit:
┌----┬---------┐
| | |
| 1 | 2 |
| |┌-------┐|
| || ||
| || 3 ||
└----┴┴-------┴┘
- Est un menu qui charge fragment n ° 2 (Un écran de recherche) dans le volet de droite.
- Est un écran de recherche qui contient le fragment n ° 3, qui est une liste de résultats.
- La liste de résultats est utilisée dans plusieurs endroits (y compris un fonctionnement de haut niveau fragment dans son propre droit).
Cette fonctionnalité fonctionne parfaitement bien sur un téléphone (Où 1 & 2 et 3 ActivityFragment
s).
Cependant, lorsque j'ai utilisé ce code:
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
Fragment frag = new FragmentNumber2();
if(toLoad != null) frag.setArguments(toLoad);
transaction.replace(R.id.rightPane, frag);
transaction.commit();
Où R.id.leftPane
et R.id.rightPane
sont <fragment>
s dans un linéaire horizontale de mise en page.
C'est ma compréhension que le code ci-dessus supprime le fragment qui est un résident et puis le remplace par un nouveau fragment. Brillant... Évidemment, ce n'est pas ce qui se passe parce que lorsque ce code est exécuté la deuxième fois que vous obtenez l'exception suivante:
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
Cela est dû au fait que le conteneur pour FragmentNumber3 a été dupliqué et qu'il n'a plus un ID unique. Le Fragment initial n'a pas été détruit (?) avant le nouveau est ajouté (dans mon esprit, cela signifie qu'il n'a pas été remplacé).
Quelqu'un peut-il me dire si cela est possible (cette réponse suggère qu'il n'est pas) ou est-ce un bug?