ScrollView必须只保留1个直接子异常

时间:2012-12-09 11:57:00

标签: android android-fragments scrollview illegalstateexception

我得到了例外:

java.lang.IllegalStateException: ScrollView can host only one direct child

这是我的布局:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/frame"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/bg_listgrey"
    android:scrollbars="none" >

    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@color/bg_listgrey" >

        <RelativeLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            android:id="@+id/rl1">

            <ImageView
               />

            <TextView
                />

            <TextView
               />

            <TextView
                />
        </RelativeLayout>

        <RelativeLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            android:id="@+id/rl2"" >

            <ImageView
                 />

            <TextView
                 />
        </RelativeLayout>
    </RelativeLayout>

</ScrollView>

在Activity的情况下,相同的布局工作正常。在片段中使用时会出现异常。

MainActivity:

FragmentTransaction t = this.getSupportFragmentManager()
        .beginTransaction();
t.add(R.id.frame, new mFragment());
t.commit();

谢谢

修改

如果我将这个ScrollView包装在FragmeLayout中,它会正常工作。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/frame"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/bg_listgrey" >

    <ScrollView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:scrollbars="none" >
.......
.......
.......
</ScrollView>
</FramLayout>

1 个答案:

答案 0 :(得分:1)

  

在Activity的情况下,相同的布局工作正常。它给出的地方   在片段中使用时的例外情况。

布局可以正常用作Activity的内容视图(但尝试向ScrollView添加另一个视图,看看它是如何发生的;))它也适用于Fragment,你只是不好用。这样:

t.add(R.id.frame, new mFragment());

会将Fragment's视图(在onCreate中创建的视图)添加到ScrollViewScrollView的标识为R.id.frame),这意味着您ScrollView中有两个视图(不允许):RelativeLayoutFragment视图的根。 addView课程的ScrollView方法会检查以强制您最终在ScrollView中使用单个孩子。

  

如果我将这个ScrollView包装在FragmeLayout中,它会正常工作。

这是正常的,因为您将Fragment的视图添加到父FrameLayout而不是ScrollView