Je me demande s'il s'agit en fait d'un bogue dans l'API Android:
J'ai une configuration comme celle-ci:
┌----┬---------┐
| | |
| 1 | 2 |
| |┌-------┐|
| || ||
| || 3 ||
└----┴┴-------┴┘
- Est un menu qui charge le fragment # 2 (Un écran de recherche) dans le volet de droite.
- Est un écran de recherche qui contient le fragment # 3, qui est une liste de résultats.
- La liste de résultats est utilisée à plusieurs endroits (y compris en tant que fragment de haut niveau fonctionnel à part entière).
Cette fonctionnalité fonctionne parfaitement bien sur un téléphone (où 1 & 2 et 3 sont 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>
dans une disposition linéaire horizontale.
Je crois comprendre que le code ci-dessus supprime le fragment qui est résident, puis le remplace par un nouveau fragment. Brillant ... Évidemment, ce n'est pas ce qui se passe car lorsque ce code s'exécute la deuxième fois, 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 de FragmentNumber3 a été dupliqué et qu'il n'a plus d'ID unique. Le fragment initial n'a pas été détruit (?) Avant l'ajout du nouveau (dans mon esprit, cela signifie qu'il n'a pas été remplacé ).
Quelqu'un peut-il me dire si c'est possible ( cette réponse suggère que ce n'est pas le cas) ou est-ce un bug?