Как создать круговой просмотрщик?

Возможный дубликат:
ViewPager как круговая очередь / упаковка

В моем коде есть три класса фрагментов. FirstActivity, SecondActivity, ThirdActivity Я хочу пронести эти три действия. Эти три из них простираются от класса Fragment

public class ViewPagerFragmentActivity extends FragmentActivity { private PagerAdapter mPagerAdapter; @Override protected void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); super.setContentView(R.layout.viewpager_layout); initialisePaging(); } /** * Initialize the fragments to be paged */ List<Fragment> fragments = new Vector<Fragment>(); ViewPager pager; private void initialisePaging() { fragments.add(Fragment.instantiate(this, FirstActivity.class.getName())); fragments.add(Fragment.instantiate(this, SecondActivity.class.getName())); fragments.add(Fragment.instantiate(this, ThirdActivity.class.getName())); this.mPagerAdapter = new MyPagerAdapter(super.getSupportFragmentManager(), fragments); pager = (ViewPager) super.findViewById(R.id.viewpager); pager.setAdapter(this.mPagerAdapter); } 

}

И вот мой класс FragmentPageAdapter

 public class MyPagerAdapter extends FragmentPagerAdapter { private final List<Fragment> fragments; public MyPagerAdapter(FragmentManager fm, List<Fragment> fragments) { super(fm); this.fragments = fragments; } @Override public Fragment getItem(int position) { System.out.println("position"+position); return this.fragments.get(position); } @Override public int getCount() { return this.fragments.size(); } 

}

Мой код работает таким образом A<->B<->c но мое требование должно выполняться следующим образом: C<->A<->B<->C<-A-> который находится в круговых фрагментах, является swipable …

Возможно круглое ViewPager. С помощью ViewPager в качестве циклической очереди / упаковки эта ссылка закодирована так. Надеюсь, это поможет вам.

Класс CircluarPagerAdapter:

>

  public class CircularPagerAdapter extends PagerAdapter{ private int[] pageIDsArray; private int count; public CircularPagerAdapter(final ViewPager pager, int... pageIDs) { super(); int actualNoOfIDs = pageIDs.length; count = actualNoOfIDs + 2; pageIDsArray = new int[count]; for (int i = 0; i < actualNoOfIDs; i++) { pageIDsArray[i + 1] = pageIDs[i]; } pageIDsArray[0] = pageIDs[actualNoOfIDs - 1]; pageIDsArray[count - 1] = pageIDs[0]; pager.setOnPageChangeListener(new OnPageChangeListener() { public void onPageSelected(int position) { int pageCount = getCount(); if (position == 0){ pager.setCurrentItem(pageCount-2,false); } else if (position == pageCount-1){ pager.setCurrentItem(1,false); } } public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { // TODO Auto-generated method stub } public void onPageScrollStateChanged(int state) { // TODO Auto-generated method stub } }); } public int getCount() { return count; } public Object instantiateItem(View container, int position) { LayoutInflater inflater = (LayoutInflater) container.getContext() .getSystemService(Context.LAYOUT_INFLATER_SERVICE); int pageId = pageIDsArray[position]; View view = inflater.inflate(pageId, null); ((ViewPager) container).addView(view, 0); return view; } @Override public void destroyItem(View container, int position, Object object) { ((ViewPager) container).removeView((View) object); } @Override public void finishUpdate(View container) { // TODO Auto-generated method stub } @Override public boolean isViewFromObject(View view, Object object) { return view == ((View) object); } @Override public void restoreState(Parcelable state, ClassLoader loader) { // TODO Auto-generated method stub } @Override public Parcelable saveState() { // TODO Auto-generated method stub return null; } @Override public void startUpdate(View container) { // TODO Auto-generated method stub } } 

И это ваш основной класс:

>

 public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ViewPager myPager = (ViewPager) findViewById(R.id.conpageslider); PagerAdapter adapter = new CircularPagerAdapter(myPager, new int[]{R.layout.first_activity, R.layout.second_activity, R.layout.third_activity}); myPager.setAdapter(adapter); myPager.setCurrentItem(3); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } } 

Вы можете попробовать что-то вроде этого:

1) Сделать getCount() вернуть огромное значение (количество проходов выше, чем ваш пользователь может использовать)

2) Сделайте getItem возвратом что-то вроде этого. fragments.get(position % fragments.size())

3) Сделайте свой пейджер стартом где-то посередине диапазона, определенного getCount() (чтобы разрешить прокрутку с A до C в начале), обязательно выберите значение, которое даст вам первый фрагмент% 3

Я знаю, что это решение кажется немного грязным, но я не могу найти лучшего в данный момент