今天在学习动态添加Fragment(碎片)到Activity的时候,报了如下图的错误:
上图的报错信息是怎么产生的,原因是我在动态调用碎片时,需要从另一个view跳到另一个view,所以需要把之前的那个view给移除掉,必须调用removeView()方法,因为我使用的为Fragment,因此根本没有removeView的重写方法。其中我做的项目为左右各一个碎片,然后左边碎片一个按钮,点击按钮后,右边的碎片布局改变,点击按钮后无法改变布局,即无法转到另一碎片。最后发现错误原因是下面的代码造成的,下面的代码源于创建第三个碎片的类:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment3, container);
return view;
}
3.解决办法,将上述代码中的某句代码改为如下代码:
View view = inflater.inflate(R.layout.fragment3, container, false);
而另外继承Fragment的类,并不需要加上false参数,因为默认我们运行此程序,就是显示那两个碎片,并没添加到另外一个碎片或容器中。
4.原因解析:
当前VIEW已经在别的View中,作为别的子View,而你现在又要将当前VIEW放在别的View中。即添加第三个碎片到第二个碎片的布局当中,所以抛出此异常。
由Android API可知,如下图所示:
其中最后个参数,boolean attachToRoot的解释,由有道翻译可知:
attachToRoot——膨胀的等级是否应该连接到根参数?如果错误,根本只是用来创建正确的子类LayoutParams根视图的XML。
即我们要把第三个参数设置为false,才能跳转到fragment3.xml文件。
5.但是不一定是因为这个原因导致这个错误的,在使用静态添加碎片时都没问题,因为不用跳到另一个碎片的布局。
7.以上内容仅供大家学习参考,谢谢!可能某些说法有错误或者讲得不太清楚,因为是自己想的和查的,请见谅。