9

我在平板电脑应用中有一个活动,我想根据方向显示不同的片段。我认为最简单的方法就是定义两个不同的布局 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>

当我运行它时,我可以从横向开始,然后转到纵向,一切都很好。但是,当我从纵向切换到横向时,应用程序崩溃并出现 android.content.res.Resources$NotFoundException,资源 ID 等于“frag3”。没错,就是在横向制作的时候找Frag3,那个模式下没有Frag3。这发生在 Activity.onCreate 堆栈期间,因此在我的任何代码有机会使应用程序崩溃之前。

片段不应该以这种方式工作吗?我需要改用 FragmentTransaction 吗?

4

1 回答 1

1

没有看到代码很难说 - 但是,Resources.NotFoundException 通常意味着您尝试不正确地查找资产(想想 R.layout.xx、R.drawable.xx 等)。

也就是说,我尝试使用您的布局 XML 编写一个小型应用程序,当我复制您的 XML 代码进行测试时,编译器对我大吼大叫,要求将字符串硬编码为 ID。尝试将 android:id 属性的值切换为如下所示:

android:id="android:id="@+id/frag1"

这可能会解决问题。

于 2011-03-10T21:25:16.083 回答