У меня есть пользовательский интерфейс, в котором мне нужен фрагмент
для отображения (с обзором) в альбомном режиме, но не в портретном режиме. В портретном режиме он все еще должен быть доступен, но вместо этого будет отображаться его результат с использованием 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)