记android ViewPager实现轮播图的无限滚动笔记

来源:互联网 发布:淘宝淘友在哪里看 编辑:程序博客网 时间:2024/06/01 09:49

遇到的问题
  在做广告无限轮播图的时候用手去主动向右滑动的时候发现出现空白的视图
  解决办法
  在重写PagerAdapter的destroyItem(View arg0, int arg1, Object arg2)时不要在这里面去调用((ViewPager) arg0).removeView(list.get(position));
  原因是在做无限循环时,我们需要getCount()设置为Integer.MAX_VALUE很大的值,且在重写instantiateItem(View arg0, final int arg1)方法时,我们需要判断当前的视图是否已经有父控件包住了,如果有则在这里从父亲中移除。
  以下是整个PagerAdapter的重写代码
 

public class AdBannerAdapter extends PagerAdapter{    //所有的View集合    private List<View> list;    //点击回调事件    private AdBannerView.OnImageClick onImageClick;    public AdBannerAdapter(Context context, List<View> list) {        this.list = list;    }      //设置无限循环    @Override    public int getCount() {        return Integer.MAX_E;        }    @Override    public boolean isViewFromObject(View arg0, Object arg1) {        return arg0 == arg1;    }    public View instantiateItem(View arg0, final int arg1) {        if (list.size() > 0)        {            final int position = arg1 % list.size()<0?list.size()+arg1:arg1 % list.size();            //如果已经被viewPager包含,则从中移除,否则会报错            if (list.get(position).getParent() != null){                ViewGroup group = (ViewGroup) list.get(position).getParent();                group.removeView(list.get(position));            }            //添加到ViewPager            ((ViewPager) arg0).addView(list.get(position));            //设置点击事件            list.get(arg1 % list.size()).setOnClickListener(new OnClickListener()            {                @Override                public void onClick(View view)                {                    if (onImageClick != null)                    {                        onImageClick.onImageClick(position);                    }                }            });            return list.get(position);        }        return null;    }    @Override    public void destroyItem(View arg0, int arg1, Object arg2) {//因为上面已经把view从ViewPager中移除,这里不要再次移除,否则在手动右滑的时候会出现空白的视图//      final int position = arg1 % list.size();//      ((ViewPager) arg0).removeView(list.get(position));    }    public AdBannerView.OnImageClick getOnImageClick() {        return onImageClick;    }    public void setOnImageClick(AdBannerView.OnImageClick onImageClick) {        this.onImageClick = onImageClick;    }}
0 0
原创粉丝点击