0

Trying to implement circular view pager(Pagination). In the below code snippet, the setCurrentItem method of the Viewpageris set to first position(0th index), but it always moves to the second position(1st index).

Below is the code, ViewPagerListener.java

 mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int positionOfView, float positionOffset, int positionOffsetPixels) {
                LogUtil.d(TAG, "START of onPageScrolled");
                mPosition = positionOfView;
                LogUtil.d(TAG, "COMPLETION of onPageScrolled");
            }

            @Override
            public void onPageSelected(int position) {
                LogUtil.d(TAG, "START of onPageSelected");
                //LogUtil.d(TAG, "Position :" + position + ", " + "Count of pager adapter :" + (mViewPager.getAdapter().getCount() - 1));
                LogUtil.d(TAG, "COMPLETION of onPageSelected");
            }

            @Override
            public void onPageScrollStateChanged(int state) {
                LogUtil.d(TAG, "START of onPageScrollStateChanged");
                if (state == ViewPager.SCROLL_STATE_DRAGGING && mPosition == 5) {
                    LogUtil.d(TAG, "trying to move to first");
                    currentItemInViewPager(0); //---> This is the position where I am setting the view to move back to start position(0th index) 

                }
                LogUtil.d(TAG, "COMPLETION of onPageScrollStateChanged");

            }
        });

@Override
    public void currentItemInViewPager(int index) {
        LogUtil.d(TAG, "START of currentItemInViewPager");
        if (index == 0) {
            if (getChildFragmentManager().findFragmentByTag("TAG_INTRO_FRAGMENT") != null) {
                LogUtil.d(TAG, "Removed");
                getChildFragmentManager().beginTransaction().remove(getChildFragmentManager().findFragmentByTag("TAG_INTRO_FRAGMENT")).commit();
            }
            mViewPager.setVisibility(View.VISIBLE);
            mTabLayout.setVisibility(View.VISIBLE);
            mPagerAdapter = new TutorialPagerAdapter(getChildFragmentManager(), this);
            mViewPager.setAdapter(mPagerAdapter);
            mTabLayout.setupWithViewPager(mViewPager, true);
        }
        mViewPager.setCurrentItem(index);
        LogUtil.d(TAG, "COMPLETION of currentItemInViewPager");
    }

Please let me know if I am missing out anything

Thanks

Nandagopal T
  • 1,979
  • 8
  • 40
  • 54
  • You forgot to update your `mPosition`. It will always go to `onPageScrollStateChanged` and position will be 5 with dragging state. – Florescu Cătălin Aug 02 '17 at 13:39
  • Well actually he is updating mPosition in the wrong method it would seem. It should be update in the onPageSelected(int position) method. Not the onPageScrolled. – Devsil Aug 02 '17 at 13:42
  • Guys, Tried with all the possible suggestions, still the result is same – Nandagopal T Aug 02 '17 at 14:55

2 Answers2

0

Before calling this method just call mViewPager.setCurrentItem(0);

Florescu Cătălin
  • 4,320
  • 1
  • 20
  • 32
yash786
  • 1,079
  • 6
  • 17
0

If you want to keep the animation of paging u will need to override the pager instead or using a library as:

https://github.com/antonyt/InfiniteViewPager

Link to Reference:

ViewPager as a circular queue / wrapping

Mohammad Tabbara
  • 1,228
  • 1
  • 14
  • 30