关于轮播ViewPager的闪退问题
public class MyAutoPagerAdapter extends PagerAdapter {
private List<View> mViews = new ArrayList<>();
public MyAutoPagerAdapter(List<View> views) {
mViews = views;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
int index=position%mViews.size();
View view = mViews.get(index);
container.removeView(view);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
int index=position%mViews.size();
View view = mViews.get(index);
container.addView(view);
return view;
}
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
}
报错:
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
意思上是说这个child已经有一个parent,你必须在这个parent中首先调用removeView()方法。
这里很明显这个child是一个View,一个子(child)View必须依赖于父(parent)View去处理,
如果你一定要使用这个childView,则必须通过parent去操作,否则,那么就得让这个child与parent脱离父子关系(即removeView())
解决方法:
@Override
public Object instantiateItem(ViewGroup container, int position) {
int index=position%mViews.size();
View view = mViews.get(index);
//解除父view与child的关系
ViewGroup parent = (ViewGroup) view.getParent();
if (parent != null) {
parent.removeAllViews();
}
container.addView(view); return view;
}