Gostaria de saber se isso é realmente um bug na API do Android:
Eu tenho uma configuração assim:
┌----┬---------┐
| | |
| 1 | 2 |
| |┌-------┐|
| || ||
| || 3 ||
└----┴┴-------┴┘
- É um menu que carrega o fragmento # 2 (uma tela de pesquisa) no painel direito.
- É uma tela de pesquisa que contém o fragmento 3, que é uma lista de resultados.
- A lista de resultados é usada em vários lugares (inclusive como um fragmento de alto nível em funcionamento).
Essa funcionalidade funciona perfeitamente bem em um telefone (onde 1 e 2 e 3 são ActivityFragment
).
No entanto, quando eu usei este código:
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
Fragment frag = new FragmentNumber2();
if(toLoad != null) frag.setArguments(toLoad);
transaction.replace(R.id.rightPane, frag);
transaction.commit();
Onde R.id.leftPane
e R.id.rightPane
estão <fragment>
s em um layout linear horizontal.
Entendo que o código acima remove o fragmento que é residente e o substitui por um novo fragmento. Brilhante ... Obviamente, não é isso que acontece, porque quando esse código é executado pela segunda vez, você obtém a seguinte exceção:
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
Isso é causado porque o contêiner de FragmentNumber3 foi duplicado e não possui mais um ID exclusivo. O fragmento inicial não foi destruído (?) Antes da adição do novo (na minha opinião, isso significa que não foi substituído ).
Alguém pode me dizer se isso é possível ( esta resposta sugere que não é) ou é um bug?