Фрагмент без представления вылетает при изменении конфигурации

У меня есть пользовательский интерфейс, в котором мне нужен фрагмент для отображения (с обзором) в альбомном режиме, но не в портретном режиме. В портретном режиме он все еще должен быть доступен, но вместо этого будет отображаться его результат с использованием ListPopupWindow .

Я решил, что смогу справиться с этим, используя тег для ландшафтного макета при программном создании фрагмента, если он не был запущен (в случае, когда мы находимся в портретной ориентации).

Это работает нормально, пока вы начинаете в альбомной ориентации, если вы начинаете в портретной ориентации, когда фрагмент создается программно, ваше приложение произойдет сбой при повороте эмулятора, когда он попытается прикрепить фрагмент к вашему макету:

java.lang.IllegalStateException: Фрагмент не создавал представления. в android.app.Activity.onCreateView (Activity.java:4095)

Документы для Fragment.isInLayout () , кажется, намекают, что он должен иметь возможность обрабатывать это следующим образом:

Return true если макет включен как часть иерархии представления действий через тег. Это будет всегда быть правдой, когда фрагменты создан с помощью тега, за исключением случая, когда старый фрагмент восстановлен из предыдущего состояние, и он не отображается в макет текущего состояния.

Итак, вопрос в том, как это сделать правильно или что-то мне не хватает?

ОБНОВЛЕНИЕ:

Похоже, isInLayout () не ведет себя так, как следует в настоящее время. Он возвращает false, если вы вручную добавили Фрагмент в контейнер.

Кроме того, если вы вручную добавите Фрагмент в контейнер, а затем поверните (устройство) в макет, который не содержит этого макета, произойдет сбой:

Причина: java.lang.IllegalArgumentException: Нет просмотр найден для идентификатора 0x7f060011 для фрагмент SearchFragment {4042f868 # 2 id = 0x7f060011 SearchFragment} в android.app.FragmentManagerImpl.moveToState (FragmentManager.java:722)

21
задан Programmer Bruce 29 May 2011 в 06:46
поделиться