这几天做项目用到了ViewPager,因为它可以实现左右划动多个页面的效果,然后
再每个页面里使用ListView,运行时总是出现”PagerAdapter java.lang.IllegalStateException:
The specified child already has a parent. You must call removeView() ..."造成程序结束。
调试时显示在PagerAdapter适配器的:
@Override
public Object instantiateItem(ViewGroup container, int position)
{
container.addView(views.get(position));
return views.get(position);
}
红色代码错误。很难理解新添加进来的view会自动绑定一个父类,由于一个儿子view不能与两个父类相关,所以
必得解绑。
在网上搜了很多解决办法大多是用mViewPager.setOffscreenPageLimit(views.size()); 这种方法不用判断
parent是不是已经存在,但多余的listview还是不能被destroy。
下来贴下我解决问题的办法,希望兄弟们不用困扰:
@Override
public Object instantiateItem(ViewGroup container, int position)
{
try{
if(views.get(position).getParent()==null){
container.addView(views.get(position));
}else{
((ViewGroup)views.get(position).getParent()).removeView(views.get(position));
container.addView(views.get(position));
}
}catch(Exception e){
e.printStackTrace();
}
return views.get(position);
}