Мені цікаво, чи це насправді помилка в API Android:
У мене таке налаштування:
┌----┬---------┐
| | |
| 1 | 2 |
| |┌-------┐|
| || ||
| || 3 ||
└----┴┴-------┴┘
- Це меню, яке завантажує фрагмент №2 (Екран пошуку) на правій панелі.
- Це екран пошуку, який містить фрагмент №3, який є списком результатів.
- Список результатів використовується в декількох місцях (в тому числі як функціонуючий фрагмент високого рівня в самому собі).
Ця функціональність чудово працює в телефоні (де 1 і 2 і 3 - це ActivityFragment
s).
Однак, коли я використовував цей код:
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
Fragment frag = new FragmentNumber2();
if(toLoad != null) frag.setArguments(toLoad);
transaction.replace(R.id.rightPane, frag);
transaction.commit();
Де R.id.leftPane
і R.id.rightPane
знаходяться <fragment>
в горизонтальній лінійній схемі.
Як я розумію, вищевказаний код видаляє фрагмент, який є резидентом, а потім замінює його новим фрагментом. Блискуче ... Очевидно, що це не так, бо коли цей код працює вдруге, ви отримуєте таке виняток:
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
Це викликано тим, що контейнер для FragmentNumber3 був дублюється, і він більше не має унікального ідентифікатора. Початковий фрагмент не був знищений (?) До того, як буде доданий новий (на мій погляд, це означає, що він не був замінений ).
Може хтось скаже мені, чи це можливо ( ця відповідь говорить про те, що це не так) чи це помилка?