你可以在Honeycomb中的片段内构建布局吗?

时间:2011-06-21 01:20:15

标签: android android-3.0-honeycomb android-fragments

我对Android有点新鲜,对Fragments来说还是新手。我正在尝试将一个应用程序从Activities转移到Fragments(以及Activities + Fragments)。在我们进入平板电脑屏幕之前,我们希望让我们的应用程序使用片段兼容性库来处理1.6+设备。我已经阅读了Google提供的文档和示例,没有明确说明我可以或不可以执行以下操作,但它不适用于我。

移植的第一个屏幕是启动器屏幕,它有一个名为fragment_splash.xml的布局文件

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/splash_background">
    <fragment class="...StartupFragmentLayout$StartupFragment"
        android:id="@+id/fragStartup" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" >

        <TextView
            android:id="@+id/debugText"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:visibility="gone"
            android:text="DEBUG ON"
            android:gravity="center"
            android:textSize="35sp"
            android:textColor="@color/blue_text"
            android:textStyle="bold"
            android:shadowColor="#FFFFFF"
            android:shadowRadius="2"/>
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0.4"
            android:gravity="bottom">
           ...
    </fragment>
</LinearLayout>

然而,这不起作用。我收到一条错误,指出StartupFragmentLayout $ StartupFragment没有创建视图。我开始怀疑我无法在<fragment>内嵌套任何内容,因为我没有在任何文档或示例中看到它。这是正确的,还是我的问题呢?

2 个答案:

答案 0 :(得分:2)

从文档中不清楚您是否可以在<fragment>中拥有子视图。鉴于没有任何片段样本做到这一点,我怀疑它不是它们的用途。您可以尝试将<fragment>更改为<FrameLayout>并在运行时将片段添加到其中(如果您确实需要),以查看是否有效。

但是,我认为您最好的解决方案是将您的子视图放入一个单独的布局文件中,然后在onCreateView通过以下内容膨胀到片段的容器中:

final View iv = inflater.inflate(R.layout.favourites, container, false);

我认为你不会因为这样做而失去任何东西。

答案 1 :(得分:1)

为了解决此问题,片段无法在布局中生成子项。 PJL建议采用正确的方法。片段内的布局应在单独的XML文件中指定。然后,您可以通过从片段onCreateView方法返回此布局将其注入视图树。