The specified child already has a parent..."错误

当我们调用ViewGroup的addView()方法时
public void addView(View child) {
        addView(child, -1);
}
最终会调用addViewInLayout()方法
private void addViewInner(View child, int index, LayoutParams params,
            boolean preventRequestLayout) {
        if (mTransition != null) {
            // Don't prevent other add transitions from completing, but cancel remove
            // transitions to let them complete the process before we add to the container
            mTransition.cancel(LayoutTransition.DISAPPEARING);
        }
        if (child.getParent() != null) {
            throw new IllegalStateException("The specified child already has a parent. " +
                    "You must call removeView() on the child's parent first.");
        }
       
 ...
        if (index < 0) {
            index = mChildrenCount;
        }  
 ...
}  
由此可知,产生这个错误的原因是child.getParent() != null,即当前View的parent不为空,之前有被加到过ViewGroup里面
解决办法:调用父view的removeAllViews()或者removeView()方法。如果不知道父view,可以使用这个方法
<pre name="code" class="java">public static void removeParent(View v){
        ViewParent parent = v.getParent();
        if(parent instanceof ViewGroup){
            ViewGroup group=(ViewGroup) parent;
            group.removeView(v);
        }
    }  


 
 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值