ViewPager adapter.notifyDataSetChanged()刷新问题

在自定义adapter继承PagerAdapter的时候,一般只会实现instantiateItem()、destroyItem()、isViewFromObject()、getCount()这几个方法,这样在数据源不变的情况下,ViewPager展现是没有问题的,但是当数据变化了,ViewPager需要增加或减少item的时候,通常会调用adapter的notifyDataSetChanged()方法,这时候就会有问题了,ViewPager可能不会有任何改变。

这时候,adapter还需要实现getItemPosition()方法,这个方法返回的是一个int值,默认为POSITION_UNCHANGED(-1),如果不重载这个方法,adapter默认一直返回POSITION_UNCHANGED,ViewPager.dataSetChanged()会根据这个方法的返回值,来判断是否调用PagerAdapter.instantiateItem()方法,如果是POSITION_UNCHANGED,instantiateItem()将一直不会调用,所以adapter.notifyDataSetChanged()没有任何效果。

只需要在adapter中重载getItemPosition(),返回POSITION_NONE(-2)即可,这样,再数据改变后,adapter.notifyDataSetChanged()就可以正常修改ViewPager里面item的值了。

adapter = new PagerAdapter() {
            @Override
            public int getCount() {
                return 1;
            }

            @Override
            public boolean isViewFromObject(View view, Object object) {
                return view == object;
            }

            @Override
            public Object instantiateItem(ViewGroup container, int position) {
                return view;

            }

            /*
             * 解决viewpager在刷新调用notifyDataSetChanged不起作用 使用懒加载后没有效果?
             */
            public int getItemPosition(Object object) {
                return POSITION_NONE;
            }

            @Override
            public void destroyItem(ViewGroup container, int position, Object object) {
                container.removeView((View) object);
            }
        };

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值