Мне интересно, действительно ли это ошибка в 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>
в горизонтальной линейной компоновке.
Я понимаю, что приведенный выше код удаляет фрагмент, который является резидентным, а затем заменяет его новым фрагментом. Brilliant... Очевидно, что это не так, потому что, когда этот код работает во второй раз, вы получаете следующее исключение:
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 был дублирован и у него больше нет уникального идентификатора. Начальный фрагмент не был уничтожен (?) До добавления нового (на мой взгляд, это означает, что он не был заменен).
Может кто-нибудь сказать мне, возможно ли это (этот ответ предполагает, что это не так) или это ошибка?