Android 无限轮播图空白问题(不是针对1张或者2张图片的情况)

  1. 前序
    大家常说,无图言luan,今天的的确没有截图,主要是分享下自己在“无限轮播图上遇到的问题”,望各位老铁见谅

  2. 问题描述
    主页面上有四个Fragment,类似于微信上的页面布局,有个fragment为首页(fragment),这里有个广告图无限轮播。问题出现:当切换到其他fragment上或者进入到新的Activity回来后,发现轮播上显示的是空白的图片(轮播图只有三张)

    相信很多老铁在做无限轮播图的时候PagerAdapter写的类似下面的代码吧,紧接着viewpager.setCurrentItem((Integer.MAX_VALUE >> 1) - (Integer.MAX_VALUE >> 1) % views.size());//这句代码是设置为Integer.MAX_VALUE一半的附近值,根据position可以设置是第一张图片,第一个小圆点

public class MyPagerAdapter extends PagerAdapter {

    private List<View> lists;

    public MyPagerAdapter (List<View> lists) {
        this.lists = lists;
    }

    @Override
    public int getCount() {
        return Integer.MAX_VALUE;
    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        return arg0 == arg1;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        if (container.getChildCount() == lists.size()) {
            container.removeView(lists.get(position
                    % lists.size()));
        }

        container.addView(lists.get(position % lists.size()), 0);
        return lists.get(position % lists.size());
    }

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

然后结合Viewpager的PageSelectedListener,使用handler去发消息

3.问题解决
根据问题描述,查找问题,发现问题是出现在首页fragment不可见时(切换到其它fragment或者进入新的页面),没有移除掉handler轮循,具体Viewpager的什么机制导致还未去研究,各位老铁有时间可以研究下
解决方法:重写Fragment中的setUserVisibleHint,其中参数isVisibleToUser为true时是当前fragment可见时,移除轮循和恢复轮循便可解决问题

解决代码如下:

  @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);

        if (pagerViewUtil == null) {
            return;
        }

        if (isVisibleToUser) {
            //fragment可见时恢复轮播图滚动
            pagerViewUtil.startScroll();
            return;
        }

        //fragment不可见时停止轮播图滚动
        pagerViewUtil.stopScroll();
    }

希望这篇文章能帮助到你,同时也希望大神们提出更好的解决方式或者指出本人在这篇文章理解上的错误,小弟感激不尽

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值