我有一个平板应用程序中的Activity,我想根据屏幕方向显示不同的Fragments。我认为最简单的方法就是定义两个不同的布局XML文件,一个是横屏的,一个是竖屏的。换句话说,我有一个/layout/home.xml文件,它看起来像这样:
<LinearLayout android:orientation="horizontal">
<fragment class="com.foo.app.Frag1" android:id="frag1"/>
<fragment class="com.foo.app.Frag2" android:id="frag2"/>
</LinearLayout>
然后在/layout-port/home.xml中:
<LinearLayout android:orientation="vertical">
<fragment class="com.foo.app.Frag2" android:id="frag2"/>
<fragment class="com.foo.app.Frag3" android:id="frag3"/>
</LinearLayout>
当我运行它时,可以从横屏切换到竖屏,并且一切正常。但是,当我从竖屏切换到横屏时,应用程序会崩溃,并显示一个带有资源ID等于“frag3”的android.content.res.Resources$NotFoundException。没错,它在切换到横屏模式时寻找Frag3,而该模式中没有Frag3。这发生在Activity.onCreate堆栈期间,因此在我的任何代码有机会使应用程序崩溃之前就发生了。
Fragment不能按照这种方式工作吗?我需要使用FragmentTransaction吗?
setRetainInstance(false);
。 - Al.