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