解决The specified child already has a parent. You must call removeView() on the child's parent first问题

使用ViewPager的时候很容易出现这个错误:

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

 (如有错误之处,欢迎各位当街拍砖或者留言回复哦)  
  这个错误字面意思很容易理解。
  出现这个错误一般是在ViewPagerAdapter中添加View的时候出现的,官方的解决办法是:
@Override
    public void destroyItem(ViewGroup container, int position, Object object) {

        container.removeView((View) object);

    }


  这样就在销毁的时候将view移出,下次添加的时候就不会出现已经有parent的情况。
但是很多时候是写了,但是还是不行。



  这种一般是出现在viewpager无限轮播的时候需要不断的添加,这时候这么写已经不能解决了。
这时候就需要将destroyItem中的代码注释。在别的地方将视图删除。

  举个栗子。。
  在我们添加视图的时候(此时我添加的是ImageView),通过视图去获取其parent。然后通过判断parent中是否含有这个视图,如果有就删除掉,没有。。。

  没有就算了。。。将parent中的控件删除后就保证添加到的父容器中不会重复添加,此时就不会报错了。。。
  这只是一种方案,如果有更好的可以评论告诉我。。代码如下:

 @Override
    public Object instantiateItem(ViewGroup container, int position) {
        if (data.size() != 0) {
            ImageView imageView = data.get(position);
            ViewGroup parent = (ViewGroup) imageView.getParent();
            if (parent != null) {
                parent.removeView(imageView);
            }
            imageView.setOnClickListener(this);
            container.addView(imageView);
            return imageView;
        } else {
            return null;
        }
    }


    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
//        container.removeView(data.get(position%data.size()));
//        container.removeView(data.get(position));
//        container.removeView((View) object);
//        if (position!=0&&position%data.size()==0){
//                container.removeAllViews();
//        }
    }



  当然如果你尝试以上方案都没有解决。。。

  欢迎一起讨论Android开发的各种知识。共同成长共同进步。我先改bug去了。。。哭哭哭
  












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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值