前序
大家常说,无图言luan,今天的的确没有截图,主要是分享下自己在“无限轮播图上遇到的问题”,望各位老铁见谅问题描述
主页面上有四个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();
}
希望这篇文章能帮助到你,同时也希望大神们提出更好的解决方式或者指出本人在这篇文章理解上的错误,小弟感激不尽