這幾天做項目用到了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);
}