The specified child already has a parent. You must call removeView() on the child’s parent first.
就是说当前的子VIew已经有了一个parent,在将他加入到viewPager中需要将它与原先的parent解绑。
因此只用在instantiateItem中添加判断就可以避免这个错误:
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
View view = imgs.get(position);
//判断其父容器是否存在,如存在,先和此子控件解除关系
ViewPager parent = (ViewPager) view.getParent();
if (parent != null){
parent.removeView(view);
}
container.addView(view);
return view;
}
因为绑定和解绑都在instantiateItem中完成,因此destroyItem中可以不写任何代码
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
// container.removeView(imgs.get(position));
}
问题解决