0

Hii My question is i have 6 frgments and i am using ViewPager to navigate from one page to another vise-versa.but i want after 6th fragment by one horizontal forward swipe to comeback to 1 Fragment .like from 6->1

Abhijit Chakra
  • 2,849
  • 28
  • 59

1 Answers1

4

Try to add the first fragment one more time at the end of the queue and when it is loaded, use viewPager.setCurrentItem(0, false) to move to the first fragment.

Actualy, it does not always work. Referring to this answer ViewPager as a circular queue / wrapping,

I made a simple example have a look :

public class MainActivity extends FragmentActivity  {

private static final int NUM_PAGES = 6;
private ViewPager pager;
private PagerAdapter pagerAdapter;
private List<SlideFragment> slideList;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    slideList = new ArrayList<SlideFragment>();
    for (int i = 0; i<NUM_PAGES; i++){
        SlideFragment slide = new SlideFragment();
        slide.setIndex(i+1);
        slideList.add(slide);
    }

    pager = (ViewPager) findViewById(R.id.pager);
    pagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
    pager.setAdapter(pagerAdapter);
}

private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {

    public ScreenSlidePagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        int _pos = position % NUM_PAGES;
        return slideList.get(_pos);
    }

    @Override
    public int getCount() {
        return Integer.MAX_VALUE;
    }
}
}

And the Fragment class :

public class SlideFragment extends Fragment {

private int index;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    ViewGroup root = (ViewGroup)inflater.inflate(R.layout.slide, container, false);
    TextView tw = (TextView) root.findViewById(R.id.textView);
    tw.setText(Integer.toString(index));
    return root;
}

public void setIndex(int index){
    this.index = index;
}
}
Community
  • 1
  • 1
forcelain
  • 1,496
  • 3
  • 13
  • 16
  • Thanks alot thats wt i want. – Abhijit Chakra Feb 11 '13 at 10:22
  • adding to the question i have one query i want to go 1 to 6 in circular way means i don't want to stop after some cycle .like here after i cyclle i cant go from 1 -6 again . – Abhijit Chakra Feb 11 '13 at 11:16
  • Thanks Again @forececlain . – Abhijit Chakra Feb 12 '13 at 04:42
  • I am getting this exception using this method : java.lang.IllegalStateException: Can't change tag of fragment. Any suggestions ? – MiaN KhaLiD Sep 17 '14 at 15:46
  • If I add 4 fragments then my code works fine. But my requirements are to use only 2 fragments which cause the exception mentioned above – MiaN KhaLiD Sep 17 '14 at 16:11
  • @forcelain can u please explain how can select from page 1 to ...3-4-5-6-71-2..any suggestion. – CoDe Nov 20 '14 at 12:02
  • Here I am getting "java.lang.IllegalStateException: Fragment already active" on update state from OnPageChangeListener. Quesiton mention here : http://stackoverflow.com/q/27054628/2624806. – CoDe Nov 21 '14 at 05:24