在使用中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的具体执行机制才能避免这类错误再发生。
相关推荐
ViewPager动态添加View , 非常简单使用的Demo , 简单易懂
android ViewPager实现动态添加View对象,demo用了2种方式实现,一种是点击动态添加 一种是滑动时动态添加 2种方式测试都能成功。 欢迎对android感兴趣的朋友技术交流。本人QQ 351531626 添加QQ请带上说明哦 =。=
主要介绍了Android viewpager中动态添加view并实现伪无限循环的方法,涉及Android使用viewpager动态加载view及view无限循环显示的相关技巧,需要的朋友可以参考下
用Fragment+Viewpager+BottomNavigationView实现界面切换,界面只有三个Fragment,可自行添加修改
这个网址必须收藏,解决viewpager嵌套viewpager和其他view 冲突问题
重写了子viewpager的方法,...解决了父viewpager不能滑动或者子viewpager不能滑动问题。修改了事件的分发。可以使子viewpager滑动到最后一页后直接滑入父viewpager的fragment。修改子viewpager可参考local.xml 。
viewPager滑动时添加不同角度效果
一个Demo,实现了ViewPager+BottomNavigationView框架,适合初学者参考
所谓动态添加,就是viewpager中有多个view,然后每个view中又有很多item,每个view相应的会有一个小圆点指示器;view、小圆点是根据实际数据的个数以及每页的item数动态生成的。
通过自定义控件来解决Scroll View+ViewPager的高度,内存问题
ViewPager通过List内容加载list.size()个自定义View,并且可以通过左右按钮实现滑动页面,点击删除按钮可以删除当前显示的内容。
ViewPagerDemo两个viewpager重合问题,这个问题有时候有些头疼,app主页很常见,事件分发机制
一个BottomNavigationView + viewPager的简单应用实例,实现固定title和ViewPager交互功能
给ViewPager添加indicator
ViewPager+Fragment动态增加页面,删除页面
viewpager自添加指示器,无限轮播
listview viewpage addheaderview 下载即可运行
用户通过点击动作在ViewPager中添加或删除ViewPager页面的演示实例
最近在做一个项目,其中有图片预览,并且可以删除任意一张图片的功能。在网络上找了好久,都没有效果。自己参考网络知识,总算搞出来一个,希望能够对同仁有所帮助。