參考文章:
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);
}
}
}