2011-03-07 54 views
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吗?

+0

这是纯属猜测,但它可能是FragmentManager被保存/通过savedInstanceState束恢复中的onPause /的onCreate的片段。试着明确地传递null来super.onCreate(),看看是否能解决崩溃。 – gngr44 2011-03-08 01:20:15

+0

尝试调用'setRetainInstance(假);'你片段 – 2011-03-08 20:57:15

+0

你能提供一个堆栈跟踪? – 2011-03-10 21:03:12

回答

1

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

这么说,我试着写使用您的布局XML一个小应用程序,和我大声吼叫的硬编码字符串作为ID的编译器,当我在你的XML代码复制到测试它。请尝试关闭的Android值:id属性读取这样的:

机器人:ID = “机器人:ID =” @ + ID/frag1"

可能解决这个问题

相关问题