The specified child already has a parent错误解决办法

  1. 今天在学习动态添加Fragment(碎片)到Activity的时候,报了如下图的错误:
    这里写图片描述
    上图的报错信息是怎么产生的,原因是我在动态调用碎片时,需要从另一个view跳到另一个view,所以需要把之前的那个view给移除掉,必须调用removeView()方法,因为我使用的为Fragment,因此根本没有removeView的重写方法。

  2. 其中我做的项目为左右各一个碎片,然后左边碎片一个按钮,点击按钮后,右边的碎片布局改变,点击按钮后无法改变布局,即无法转到另一碎片。最后发现错误原因是下面的代码造成的,下面的代码源于创建第三个碎片的类:

    @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.以上内容仅供大家学习参考,谢谢!可能某些说法有错误或者讲得不太清楚,因为是自己想的和查的,请见谅。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值