【BUG解析】调用PagerAdapter.notifyDataSetChanged()不更新

  • 问题描述

Android开发一个广告显示的页面,支持左右滑动,当数据加载完成之后想刷新显示

调用mAdapter.notifyDataSetChanged() 来促发却没效果

  • 问题调查

instantiateItem()在notifyDataSetChanged()后并没有被触发

  • 问题修改

    // getItemPosition的返回值将决定instantiateItem是否更新
    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }


  • 原理分析


  • getItemPosition()

    • 该函数用以返回给定对象的位置,给定对象是由 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()不更新)