Мне интересно, если это на самом деле ошибка в Android API:
У меня есть такая настройка:
┌----┬---------┐
| | |
| 1 | 2 |
| |┌-------┐|
| || ||
| || 3 ||
└----┴┴-------┴┘
- Это меню, которое загружает фрагмент № 2 (экран поиска) в правой панели.
- Это экран поиска, который содержит фрагмент № 3, который является списком результатов.
- Список результатов используется в нескольких местах (в том числе как функционирующий фрагмент высокого уровня сам по себе).
Эта функция прекрасно работает на телефоне (где 1, 2 и 3 - ActivityFragment
с).
Тем не менее, когда я использовал этот код:
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 был продублирован и у него больше нет уникального идентификатора. Первоначальный фрагмент не был уничтожен (?) До добавления нового (на мой взгляд, это означает, что он не был заменен ).
Может кто-нибудь сказать мне, если это возможно ( этот ответ предполагает, что это не так), или это ошибка?