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
First create an interface
public interface OnPageChangedListener {
void OnPageChanged(int position); }
Next Implement your activity with OnPageChangedListener interface and do the below stuff
private void setupViewPager(ViewPager viewPager){
viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
viewPagerAdapter.addFragment(new Fragment1(this));
viewPagerAdapter.addFragment(new Fragment2(this));
viewPagerAdapter.addFragment(new Fragment3(this));
viewPagerAdapter.addFragment(new Fragment4(this));
viewPagerAdapter.addFragment(new Fragment5(this));
viewPagerAdapter.addFragment(new Fragment6(this));
viewPager.setAdapter(viewPagerAdapter);
}
@Override
public void OnPageChanged(int position) {
viewPager.setCurrentItem(position);
}
In your fragments create a constructor using
private OnPageChangedListener listener;
public Fragment1(OnPageChangedListener listener1) {
this.listener = listener1;
}
ViewPagerAdapter
public class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
switch (position) {
}
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment) {
mFragmentList.add(fragment);
}}
Hope this helps you
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
Button:
Button yourButton = (Button)findViewById(R.id.button1);
yourButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
mViewPager.setCurrentItem(getItem(+1), true); //getItem(-1) for previous
}
});
Function:
private int getItem(int i) {
return mViewPager.getCurrentItem() + i;
}
Hope this helps :)