`
vocaloid
  • 浏览: 31907 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

ViewPager 出现重复添加View问题

阅读更多

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

 

报错code为:

@Override
		public 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解除:

@Override
		public 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 block
				e.printStackTrace();
			}
			return mListViews.get(arg1);

		}

 

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

分享到:
评论
1 楼 yuehuaray 2013-08-16  
如果循环滚动,这样会导致白屏幕

相关推荐

Global site tag (gtag.js) - Google Analytics