标签:
问题描述
Android开发一个广告显示的页面,支持左右滑动,当数据加载完成之后想刷新显示
调用mAdapter.notifyDataSetChanged() 来促发却没效果
问题调查
instantiateItem()在notifyDataSetChanged()后并没有被触发
问题修改
// getItemPosition的返回值将决定instantiateItem是否更新 @Override public int getItemPosition(Object object) { return POSITION_NONE; }
原理分析
该函数用以返回给定对象的位置,给定对象是由 instantiateItem() 的返回值。
在 ViewPager.dataSetChanged() 中将对该函数的返回值进行判断,以决定是否最终触发 PagerAdapter.instantiateItem() 函数。
在 PagerAdapter 中的实现是直接传回 POSITION_UNCHANGED。 如果该函数不被重载,则会一直返回 POSITION_UNCHANGED,从而导致 ViewPager.dataSetChanged() 被调用时,认为不必触发 PagerAdapter.instantiateItem()。很多人因为没有重载该函数,而导致调用
PagerAdapter.notifyDataSetChanged() 后,什么都没有发生。
参考网站
http://www.apkbus.com/android-90417-1-1.html
【BUG解析】调用PagerAdapter.notifyDataSetChanged()不更新
标签:
原文地址:http://my.oschina.net/u/2273965/blog/386838