参考文章:
https://www.jianshu.com/p/99b9e4b53dc0
https://www.cnblogs.com/zhujiabin/p/7470721.html
实现无限循环方式
1.viewpager adapter中
@Override
public int getCount() {
return data.size() == 0 ? 0 : Integer.MAX_VALUE;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View view = getView();
//获取dataindex方式
int dataIndex = position == 0 ? data.size() - 1 : (position == data.size() + 1 ? 0 : position - 1);
view.setTag(position);
container.addView(view);
return view;
}
初始化时候 viewPager.setCurrentItem(position),设置一个中间值,
这并不是一个真正意义上的循环,在有些需要全部刷新的adapter item中会导致性能很差.
2.推荐方式
@Override
public int getCount() {
return data.size() == 0 ? 0 : data.size() + 2;
}
在首尾各加一个数据
adapter position =0,放置 data.size()数据,position==last,放置data.get(0),数据
在viewpager
@Override
public void onPageScrollStateChanged(int state) {
if(state ==ViewPager.SCROLL_STATE_IDLE){
if (viewPager.getCurrentItem() == 0) {
viewPager.setCurrentItem(voicePagerAdapter.getCount()-2, false);
} else if (viewPager.getCurrentItem() == voicePagerAdapter.getCount() - 1) {
viewPager.setCurrentItem(1, false);
}
}
}