Unlimited/Dynamic ViewPager in both directions Unlimited/Dynamic ViewPager in both directions android android

Unlimited/Dynamic ViewPager in both directions


Will this help,

public static class MyAdapter extends FragmentPagerAdapter {    public MyAdapter(FragmentManager fm) {        super(fm);    }    @Override    public int getCount() {        return Integer.MAX_VALUE;    }    @Override    public Fragment getItem(int position) {        return getFragmentBasedOnPosition(position);    }    private Fragment getFragmentBasedOnPosition(int position) {        int fragmentPos = position % 3; // Assuming you have 3 fragments        switch(fragmentPos) {            case 1:            return Fragment1.newInstance();            case 2:            return Fragment2.newInstance();            case 3:            return Fragment3.newInstance();        }    }}

and then,

mPager.setCurrentItem((int)(Integer.MAX_VALUE/2)); // assuming mPager is your ViewPager


Using negative position values stands very far from natural order of ViewPager usage and is not the Adapter issue at all. Please have a look into the source code of ViewPager in the support package source in Android SDK. For example, here is a setCurrentItemInternal private implementation:

void setCurrentItemInternal(int item, boolean smoothScroll, boolean always, int velocity) {    if (mAdapter == null || mAdapter.getCount() <= 0) {        setScrollingCacheEnabled(false);        return;    }    if (!always && mCurItem == item && mItems.size() != 0) {        setScrollingCacheEnabled(false);        return;    }    if (item < 0) {        item = 0;    } else if (item >= mAdapter.getCount()) {        item = mAdapter.getCount() - 1;    }    final int pageLimit = mOffscreenPageLimit;    if (item > (mCurItem + pageLimit) || item < (mCurItem - pageLimit)) {        // We are doing a jump by more than one page.  To avoid        // glitches, we want to keep all current pages in the view        // until the scroll ends.        for (int i=0; i<mItems.size(); i++) {            mItems.get(i).scrolling = true;        }    }    final boolean dispatchSelected = mCurItem != item;    populate(item);    scrollToItem(item, smoothScroll, velocity, dispatchSelected);}

As you can see, ViewPager explicitly assumes no negative position values.