Android报错ViewPager: Can't Change Tag of Fragment的解决方法
2016-10-01 13:26
639 查看
问题描述
在应用里用到了ViewPager和FragmentPagerAdapter 实现多页(>20页)滑动,每一页都是一个Fragment,给ViewPager注册一个OnPageChangeListener,当知道某一个Fragment被选中时,开始调用其刷新数据的方法。并有一目录,点击某个条目时,调用 ViewPager 的 setCurrentItem(position) ,页面跳转到指定页,但是此时奇怪的是注册的 OnPageChangeListener#onPageSelected 居然没有被调用,表现为选中的页面没有刷新数据。
这时候往右侧滑动几页没问题,再往左侧滑动几页就一定会报出异常:
java.lang.IllegalStateException: Can’t change tag of fragment PageFragment
分析原因
经过一番排查,发现问题出现的原因在于我的FragmentPagerAdapter 内部维护的List集合造成的,因为我想自己来控制一下Fragment内部数据的销毁,并且使Fragment得到重用。但是,在往List集合中,add(fragment)的时候,没有注意FragmentPagerAdapter#getItem(position)传入的位置和实例化fragment所存放在List中的位置!
导致,List中会有可能出现存在两个指针指向相同的Fragment,表现出来的样子就是报异常“Can’t change tag of fragment”,并且不会调用其刷新数据的方法,因为其isShow被标记为true了。
解决方法
判断一下position与List的当前大小即可。当List大小比position大时,意味着,要从里取。
反之则表示,要在List对应position的location放一个Fragment。
相关文章推荐
- Android—ViewPager: Can't Change Tag of Fragment
- Android 中ViewPager+fragment报异常:IllegalStateException:Can't change tag of fragment的一种解决思路
- 【android】解决Viewpager设置高度为wrap_content无效的方法
- 使用viewpager,actionbar,fragment时正确导入android-support-v4.jar的方法
- Android解决ViewPager嵌套Fragment,Fragment嵌套ViewPager滑动冲突
- [android] viewpager获取当前view报空指针的解决方法
- Android ViewPager嵌套ViewPager滑动冲突的解决方法
- 【转】Android使用Fragment来实现ViewPager的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
- Android 防止ViewPager中的Fragment被销毁的方法,更加流畅
- 【android】从源码分析调用ViewPager的notifyDataSetChanged无刷新的问题及解决方法
- Android ViewPager的载入大图Out of Memory问题解决
- Android使用Fragment来实现ViewPager的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
- android viewpager fragment切换时界面卡顿解决办法
- android开发中出现Only the original thread that created a view hierarchy can touch its views.错误的解决方法
- [Android分享] ViewPager的setOnPageChangeListener方法详解
- 完美解决Android里面scrollview嵌套及listview嵌套viewpager的滑动冲突问题的简单方法
- Android使用Fragment来实现ViewPager的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
- 解决Android开发中ViewPager动态设置PagerAdapter时第二次进入Fragment内容不显示的问题
- Android基础:翻页控件Viewpager的使用方法,viewpager+fragment混合使用
- Android viewPager.setOnPageChangeListener()方法过时怎么办