最近写项目的时候遇到一个问题,个人主页使用viewpage,设置三张图片,点击编辑 跳转到编辑页面修改图片内容和排序,返回来重新设置viewpage数据,调用notifyDataSetChanged(),结果数据没变化,查资料看到Viewpager 的刷新过程是这样的:
在每次调用 PagerAdapter 的 notifyDataSetChanged()
方法时,都会激活 getItemPosition(Object object) 方法,该方法会遍历 ViewPager 的所有 Item(由缓存的 Item 数量决定,默认为当前页和其左右加起来共3页,这个可以自行设定,但是至少会缓存2页),
为每个 Item 返回一个状态值(POSITION_NONE/POSITION_UNCHANGED),如果是 POSITION_NONE,
那么该 Item 会被 destroyItem(ViewGroup container, int position, Object object) 方法 remove 掉,
然后重新加载,如果是 POSITION_UNCHANGED,就不会重新加载,默认是 POSITION_UNCHANGED,
所以如果不重写 getItemPosition(Object object),修改返回值,就无法看到 notifyDataSetChanged()
的刷新效果。
最简单的解决方案
那就是直接一刀切:重写 PagerAdapter 的 getItemPosition(Object object) 方法,将返回值固定为
POSITION_NONE。