使用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中是否含有这个视图,如果有就删除掉,没有。。。
这只是一种方案,如果有更好的可以评论告诉我。。代码如下:
@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去了。。。哭哭哭