java.lang.IllegalStateException:The specified child already has a parent异常万能解决方案:removeView

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

这个异常让人很头疼,你必须要在parent上调用removeView移除掉你要重复使用的这个view才可以,有时候不知道你的view被哪一个parent给绑定了,所以很头疼。下面给出解绑方法的思路:

解决思路1:帮孩子找父母,然后断绝亲子关系:

 

三步走:

假设你的子view就叫child_view

1、 找出parent

ViewParent parent = child_view.getParent();

正常想法,直接parent.removeView不就可以了嘛,可是你会发现ViewParent没有removeView方法。接下来:

 

2、找出这个parent具体是什么类型

if(parent!=null)
    Log.i("who_are_you",parent.getClass().toString());

直接输出,然后你会看到输出的类型是什么,我这边是FrameLayout,真相大白,接下来解绑:



3、直接强转,解绑:

FrameLayout mFrameLayout = (FrameLayout)parent;
mFrameLayout.removeView(child_view);

熟悉更多android代码以后,才发现其实有更简单的方法,只需一行代码:

解决思路2:给孩子找个继父母,然后断绝亲子关系:

((ViewGroup)childView.getParent()).removeView(childView);

当然,实际开发你得判断这个childView的父view是否为空 。

 

OK,解完,收工。 

转载注明出处:https://blog.csdn.net/qq_35584878/article/details/93038872

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值