viewPager+fragment实现循环滚动

          主要有两个思路:

     1、viewPager的适配器 getCount() 方法返回Integer.max;  getItem() 方法 返回 list.get(position%list.size());

    2、viewPager的适配器 getCount() 方法返回list.size(); getItem() 方法 返回 list.get(position),;处理最后一张继续滑和第一张继续滑的问题。

    思路1,在实现的时候遇到很多问题。当list.size()为1,2,3,时会有问题,会报页面active 或者 已经added


    花费很长时间处理后,还是选择了思路2。现在把思路2 的代码贴下

 private Toast toast;
private int pos = 0;
boolean isLast = true;
@Override
public void onPageScrollStateChanged(int arg0) {
if(arg0 == 2) {
            isLast = false;
        } else if(arg0 == 0 && isLast) {
            //此处为你需要的情况,再加入当前页码判断可知道是第一页还是最后一页
        if(datas.size()!=1&&pos==(datas.size()-1))
        {
//         toast = Toast.makeText(context,  "最后一页", Toast.LENGTH_SHORT);
//                 toast.show();
                 viewPager.setCurrentItem(0);
        }
        else if(datas.size()!=1&&pos==0)
        {
//         toast = Toast.makeText(context,  "第一页", Toast.LENGTH_SHORT);
//                toast.show();
                viewPager.setCurrentItem(datas.size()-1);
        }
        
        } else {
            isLast = true;
        }
}


@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
//在这里判断---



}


@Override
public void onPageSelected(int arg0) {
pos=arg0;
// System.out.println("------arg0-------"+arg0);
// 0--0  1---1  2----  3 
// if(pList.size()==2&&arg0<4)
// {
// datas.get(arg0).iView();
//
// else if(pList.size()==3&&arg0<6)
// {
// datas.get(arg0).iView();
// }
// else
// {
// datas.get(arg0%datas.size()).iView();
// }
datas.get(arg0%datas.size()).iView();
arg0=arg0%pList.size();
cityTv.setText(pList.get(arg0).getProvinceName());
curAreaId = pList.get(arg0).getProvinceId();
MainFragment.locationTv.setText(pList.get(arg0).getProvinceName());
}

 

 


        

猜你喜欢

转载自blog.csdn.net/ylj15503473366/article/details/50845402
今日推荐