viewpager刷新单个页面

0
项目中的问题,viewpager加载少量的图片,然后刷到最后一页,把图片模糊展示,点击一个按钮之后,加载大量图片,并且要把模糊的图片变得清晰,我用了Adapter.notifyDataSetChanged(),虽然会使图片增多,但是模糊的图片并不会变得清晰
1
viewpager不同于listview和recycleView,单纯的调用notifyDataSetChanged方法,并不会刷新页面
因为viewpager的刷新过程是这样的:在每次调用notifyDataSetChanged()时,都会激活getItemPosition(Object object)方法,该方法会遍历viewpager的所有item,为每个item返回一个状态值(POSITION_NONE/POSITION_UNCHANGED),如果是none,那么该item会被destroyItem(ViewGroup container, int position, Object object)方法remove掉,然后重新加载,如果是unchanged,就不会重新加载,默认是unchanged,所以如果我们不重写getItemPosition(Object object),就无法看到刷新效果。
2
解决方案一
重写PagerAdapter的getItemPosition(Object object)方法,使其返回POSITION_NONE

@Override  
public int getItemPosition(Object object) {  
    return POSITION_NONE;  
}  

但是不需要刷新的也重新刷新了,有点浪费,所以要多做一些事:在instantiateItem时给每个view加上tag,然后在需要刷新页面时通过View.getTag()来判断是否是我们想要刷新的页面,只给当前页面返回POSITION_NONE。

//这里本来是可以用setTag(Object tag)的但是后边我用了Glide 这个方法和Glide有冲突
//无奈改为两个参数的 第一参数是一个int值 但不能随便传 必须是资源id 这个资源ID我随便穿的 没发现什么问题
 PhotoView imageView = new PhotoView(container.getContext());
        imageView.setTag(R.id.account, position);
@Override
    public int getItemPosition(Object object) {
        View view = (View) object;
        int currentPagerIdx = ((DetailsActivity) activity).getCurrentPagerIdx();

        if (currentPagerIdx == (Integer) view.getTag(R.id.account)) {
            return POSITION_NONE;
        } else {
            return POSITION_UNCHANGED;
        }
    }

getCurrentPagerIdx是我那个activity里自己写的方法

public int getCurrentPagerIdx(){
        return vpDetails.getCurrentItem();
    }

大致就这些了 韦昕同学等她妹妹 一直在闪我的微信 我要继续爆她俩的照
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值