ViewPager是现在比较常用的图片轮播容器,本人在项目中做循环轮播时,踩了不少坑,特开一贴记录。
ViewPagerAdapter刷新问题
这是个老生常谈的问题了,网上的解决方案也一堆,这里主要记录一下问题产生的原因。
每次调用notifyDataSetChanged()
时,都会触发getItemPosition(Object object)
。该方法会遍历viewpager
的所有item
,为每个item
返回一个状态值(POSITION_NONE/POSITION_UNCHANGED)
。
如果item
的位置如果没有发生变化,则返回POSITION_UNCHANGED
。如果返回了POSITION_NONE
,表示该位置的item
已经不存在了。默认的实现是假设item
的位置永远不会发生变化,而返回POSITION_UNCHANGED
。 所以如果我们不重写getItemPosition(Object object)
,就无法看到刷新效果。
对于这两种状态:
如果是POSITION_NONE
,那么该item
会被destroyItem(…)
方法remove掉,然后重新加载;
如果是POSITION_UNCHANGED
,就不会重新加载。
所以我们解决的方案也明了了:初始化item