我得到了例外:
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>
答案 0 :(得分:1)
在Activity的情况下,相同的布局工作正常。它给出的地方 在片段中使用时的例外情况。
布局可以正常用作Activity
的内容视图(但尝试向ScrollView
添加另一个视图,看看它是如何发生的;))它也适用于Fragment
,你只是不好用。这样:
t.add(R.id.frame, new mFragment());
会将Fragment's
视图(在onCreate
中创建的视图)添加到ScrollView
(ScrollView
的标识为R.id.frame
),这意味着您ScrollView
中有两个视图(不允许):RelativeLayout
和Fragment
视图的根。 addView
课程的ScrollView
方法会检查以强制您最终在ScrollView
中使用单个孩子。
如果我将这个ScrollView包装在FragmeLayout中,它会正常工作。
这是正常的,因为您将Fragment
的视图添加到父FrameLayout
而不是ScrollView
。