双Fragment中使用ScrollView触发IllegalStateException问题求助
双Fragment中使用ScrollView触发IllegalStateException问题求助
嘿,我来帮你捋捋这个头疼的问题!你现在遇到的java.lang.IllegalStateException: ScrollView can host only one direct child异常,其实不是因为两个Fragment都用了ScrollView,而是你至少有一个Fragment里的ScrollView直接放了不止一个子View——Android的ScrollView设计规则就是只能有一个直接子元素,不管你在多少个Fragment里用,只要单个ScrollView违反这个规则,加载布局时就会触发报错。
解决起来很简单,照着下面的步骤改就行:
- 给每个Fragment里的ScrollView,套一个唯一的直接子容器(LinearLayout、ConstraintLayout这些都可以)
- 把原来ScrollView下的所有控件,全部放到这个容器里面
举个错误写法和修正后的例子:
错误的布局写法(会触发异常)
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="测试文本"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="点击按钮"/> </ScrollView>
修正后的布局写法
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- 用LinearLayout作为ScrollView的唯一直接子View --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="测试文本"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="点击按钮"/> </LinearLayout> </ScrollView>
把两个Fragment的ScrollView布局都改成这种嵌套容器的形式,再去测试Fragment切换,应该就不会再抛出这个异常了。本质就是让每个ScrollView都严格遵守“只有一个直接子元素”的规则,和你在多个Fragment里使用ScrollView本身没有冲突哦~
备注:内容来源于stack exchange,提问作者Samir
相关产品推荐
相关产品推荐

