java.lang.IllegalStateException: The specified child already has a parent 错误处理

今天在项目中发现,ViewPager的内容在动态更新之后,重复点击使用可能出现如题所述的错误,而根据错误日志的描述,错误的根源是在adapter中的instantiateItem()方法。而该问题的解决办法在StackOverflow中已经有了很好的解释,下面原文搬运如下:

The problem is that in your adapters method instantiateItem
you call container.addView(v);

but every View can have only one parent,
so it can be added only one time to a container via addView(…).

When you open the popup the first time, everything works, because v
doesn’t have a parent that time. But when you open your popupwinow the second time,
it adds the view again to the container. That cerates the error.

Try to destroy the view if you close the popup view or remove all children views from it with
container.removeAllViews()

而默认instantiateItem()方法中的代码如下:

@Override
public Object instantiateItem(ViewGroup container, int position) {
    container.addView(view);
    return view;
}

根据上文中的描述,我们在返回view之前做一下处理,代码如下

@Override
    public Object instantiateItem(ViewGroup container, int position) {
        ViewGroup parent = (ViewGroup) view.getParent();
        if (parent != null) {
            parent.removeAllViews();
        }
        container.addView(view);
        return view;
    }

防止出现一个view拥有多个parent的情况,即可避免上述错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值