简体   繁体   中英

Android ViewPager with setCurrentItem not working properly

Trying to implement circular view pager(Pagination). In the below code snippet, the setCurrentItem method of the Viewpager is 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

在调用此方法之前,只需调用mViewPager.setCurrentItem(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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM