Zastanawiam się, czy to rzeczywiście błąd w Android API:
Mam taką konfigurację:
┌----┬---------┐
| | |
| 1 | 2 |
| |┌-------┐|
| || ||
| || 3 ||
└----┴┴-------┴┘
- To menu, które ładuje fragment # 2 (ekran wyszukiwania) w prawym panelu.
- Jest ekranem wyszukiwania zawierającym fragment nr 3 będący listą wyników.
- Lista wyników jest używana w kilku miejscach (w tym jako funkcjonujący sam w sobie fragment wysokiego poziomu).
Ta funkcja działa doskonale na telefonie (gdzie 1 i 2 i 3 to ActivityFragment
s).
Jednak gdy użyłem tego kodu:
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
Fragment frag = new FragmentNumber2();
if(toLoad != null) frag.setArguments(toLoad);
transaction.replace(R.id.rightPane, frag);
transaction.commit();
Gdzie R.id.leftPane
i R.id.rightPane
są <fragment>
s w poziomym układzie liniowym.
Rozumiem, że powyższy kod usuwa rezydentny fragment, a następnie zastępuje go nowym fragmentem. Świetnie ... Oczywiście tak się nie dzieje, ponieważ gdy ten kod jest uruchamiany po raz drugi, pojawia się następujący wyjątek:
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
Jest to spowodowane tym, że kontener dla FragmentNumber3 został zduplikowany i nie ma już unikalnego identyfikatora. Początkowy fragment nie został zniszczony (?) Przed dodaniem nowego (moim zdaniem oznacza to, że nie został zastąpiony ).
Czy ktoś może mi powiedzieć, czy jest to możliwe ( ta odpowiedź sugeruje, że tak nie jest), czy to błąd?