Android ViewPager Prev/Next Button

后端 未结 9 917
北荒
北荒 2020-12-08 04:00

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

相关标签:
9条回答
  • 2020-12-08 04:46

    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

    0 讨论(0)
  • 2020-12-08 04:48

    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
    
    0 讨论(0)
  • 2020-12-08 04:51

    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 :)

    0 讨论(0)
提交回复
热议问题