У меня есть пользовательский интерфейс, где мне нужен Fragment
для отображения (с видом) в альбомном режиме, но не в портретном режиме. В портретном режиме он все равно будет доступен, но вместо этого отобразит его результат с помощью ListPopupWindow
.
Я решил, что смогу справиться с этим, используя тег <fragment />
для макета ландшафта, создавая фрагмент программно, если он не был запущен (в случае, когда мы находимся на портрете).
Это работает отлично, пока вы начинаете в ландшафте, если вы начинаете с портрета, где фрагмент создается программно, ваше приложение будет сбой при повороте эмулятора, когда он попытается прикрепить фрагмент к вашему макету:
java.lang.IllegalStateException: Фрагмент не создал вид. в android.app.Activity.onCreateView(Activity.java:4095)
Документы для Fragment.isInLayout()
, похоже, намекают, что он должен иметь возможность обрабатывать его следующим образом:
Возвращает true, если макет включен как часть иерархии видов деятельности через тег. Это будет всегда быть правдой, когда фрагменты созданный с помощью тега, за исключением случая, когда фрагмент восстанавливается из предыдущего и он не появляется в компоновка текущего состояния.
Итак, вопрос в том, как это сделать правильно или если что-то мне не хватает?
UPDATE:
Кажется, что isInLayout()
не ведет себя так же хорошо, как сейчас. Он возвращает false, если вы добавили Fragment
в контейнер вручную.
Кроме того, если вы добавите Fragment
вручную в контейнер и затем поверните (устройство) в макет, который не содержит этот макет, он сработает:
Вызвано: java.lang.IllegalArgumentException: Нет просмотр найден для id 0x7f060011 для фрагмент SearchFragment {4042f868 # 2 id = 0x7f060011 SearchFragment} at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:722)