读书人

ViewPager 出现重复添加View有关问题

发布时间: 2013-03-01 18:33:02 作者: rapoo

ViewPager 出现重复添加View问题

在使用中ViewPager和GridView整合做一个自定义UI时,在PagerAdapter重载方法instantiateItem()中出现异常

?

报错code为:

@Overridepublic Object instantiateItem(View arg0, int arg1) {((ViewPager) arg0).addView(mListViews.get(arg1), 0); //此句报错。return mListViews.get(arg1);}

?

具体问题为:

?

java.lang.IllegalStateException The specified child already has a parent. You must call removeView() on the child's parent first.

?

?

查阅相关信息后发现错误原因为指定要添加的view已经被设置了parent,如果要添加就必须先解除原parent的联系.观察Exception错误栈发现导致这一步是因为ViewPager执行setCurrentItem(index)方法时会间接调用到instantiateItem()方法,具体原因未知。

?

修改代码,先判断需要添加的view是否有parent再做add操作,bug解除:

@Overridepublic Object instantiateItem(View arg0, int arg1) {try {if(mListViews.get(arg1).getParent()==null){((ViewPager) arg0).addView(mListViews.get(arg1), 0);}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return mListViews.get(arg1);}

?

不过这只是暂时的解决方法,还需要再熟悉viewpager的具体执行机制才能避免这类错误再发生。

读书人网 >移动开发

热点推荐