我有一个用户界面,我需要Fragment
在横向模式下而不是纵向模式下显示(带有视图)。在纵向模式下,它应该仍然可用,但将显示其结果,ListPopupWindow
而不是使用。
我想我可以通过使用<fragment />
横向布局的标签来处理这个问题,同时以编程方式创建片段,如果它没有启动(在我们处于纵向的情况下)。
只要您从横向开始,这就可以正常工作,如果您从纵向开始,在以编程方式创建片段的地方,当您旋转模拟器时,当它尝试将片段附加到您的布局时,您的应用程序将崩溃:
java.lang.IllegalStateException:片段没有创建视图。在 android.app.Activity.onCreateView(Activity.java:4095)
的文档Fragment.isInLayout()
似乎暗示它应该能够以这种方式处理它:
如果布局通过标签作为活动视图层次结构的一部分包含,则返回 true。当通过标签创建片段时,这将始终是正确的,除非旧片段从以前的状态恢复并且它没有出现在当前状态的布局中。
所以问题是如何正确地做到这一点,或者我是否遗漏了什么?
更新:
似乎isInLayout()
目前的行为也不尽如人意。如果您Fragment
手动将 a 添加到容器中,它将返回 false。
此外,如果您Fragment
手动将 a 添加到容器中,然后将(设备)旋转到不包含该布局的布局,它将崩溃:
原因:java.lang.IllegalArgumentException:在 android.app.FragmentManagerImpl.moveToState(FragmentManager.java:722) 中找不到片段 SearchFragment{4042f868 #2 id=0x7f060011 SearchFragment} 的 id 0x7f060011 的视图