Okay, so I\'m developing an Android app that utilises a ViewPager to display pages.
Within each page, I have a set of buttons to use for navigating between pages (in
A failproof upgrade to sweggersen's and Alex Orlov's answer,
// For scrolling to next item
nextPageButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
viewPager.setCurrentItem(getNextPossibleItemIndex(1), true);
}
});
// For scrolling to previous item
previousPageButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
viewPager.setCurrentItem(getNextPossibleItemIndex(-1), true);
}
});
Add getNextPossibleItemIndex() method in your Activity/Fragment,
private int getNextPossibleItemIndex (int change) {
int currentIndex = viewPager.getCurrentItem();
int total = viewPager.getAdapter().getCount();
if (currIndex + change < 0) {
return 0;
}
return Math.abs((currentIndex + change) % total) ;
}
This way, you will be able to change currentItem without worrying about IndexOutOfBoundsException as suggested by Heinrich's comment. Note that using this method, items will be displayed like a circular list.
1 -> 2 -> 3 -> 1 -> 2 -> 3 -> 1
But going back, it will stop at first item
1 <- 1 <- 2 <- 3