2013-04-08 2 views
2

Как я могу создать ViewPager в both direction. Является ли это возможным ? Если возможно, как я могу его реализовать.Viewpager в Android

Я создал viewpager в одном направлении, используя следующий код:

private void initialisePaging() { 

     List<Fragment> fragments = new Vector<Fragment>(); 
     fragments.add(Fragment.instantiate(this, Fragment0.class.getName())); 
     fragments.add(Fragment.instantiate(this, Fragment1.class.getName())); 
     fragments.add(Fragment.instantiate(this, Fragment2.class.getName())); 
     this.mPagerAdapter = new MyPagerAdapter(super.getSupportFragmentManager(), fragments); 

     ViewPager pager = (ViewPager) super.findViewById(R.id.viewpager); 
     pager.setAdapter(this.mPagerAdapter); 
    } 

Может кто-нибудь помочь мне out..thanks !!

+0

@AbhishekSabbarwal Спасибо за ваш ответ Позвольте мне проверить ссылку – 2013-04-08 08:20:53

+0

@AbhishekSabbarwal Я хочу, чтобы viewpager в обоих направлениях не в одном направлении! – 2013-04-08 08:25:22

+0

вы можете сделать это с помощью этой библиотеки и установить ориентацию пейджера горизонтально и вертикально [здесь] (http://stackoverflow.com/questions/10720276/error-including-android-directionalviewpager-jar-in-eclipse/14268702#14268702) – sheetal

ответ

2

Хорошо от того, что я понимаю, у вас есть список Fragments, в котором вы хотите, чтобы пользователь, чтобы начать в середине Pages/Fragments, я играл с и протестировали следующий код и он работает нормально для меня.

Если вы знаете количество Fragments и не меняете динамическое изменение Fragments, тогда это можно обрабатывать гораздо проще, но я ухожу от вашего кода, предоставленного в OP. Попробуйте это:

public class MainActivity extends FragmentActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 

     // This is going to initialize our Fragment list 
     mSectionsPagerAdapter.init(); 

     // Now we are going to determine the starting position 
     int startPos = mSectionsPagerAdapter.getStartPosition(); 

     mViewPager = (ViewPager) findViewById(R.id.pager); 
     mViewPager.setAdapter(mSectionsPagerAdapter); 

     // AFTER we set the adapter we will define our start position 
     mViewPager.setCurrentItem(startPos); 
    } 
} 

Теперь давайте взглянем на наш FragmentPagerAdapter

Я добавил пару методов для этого класса, метод init(), setCount() и getStartPosition().

public class SectionsPagerAdapter extends FragmentPagerAdapter { 
    private int _count = 2; 
    private int _start = 0; 

    List<Fragment> fragments; 

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

    public void init() { 
     fragments = new ArrayList<Fragment>(); 
     fragments.add(new MyFragmentOne()); 
     fragments.add(new MyFragmentTwo()); 
     fragments.add(new MyFragmentThree()); 
     fragments.add(new MyFragmentFour()); 
     fragments.add(new MyFragmentFive()); 
     setCount(); 
    } 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
     return super.instantiateItem(container, position); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return (fragments.size() >= position) ? fragments.get(position) : null; 
    } 

    // We have created this method to get the starting position 
    // You might want to play around with this to make sure the returned 
    // position fits what you want for odd numbered Fragment Pages 
    public int getStartPosition() { 
     _start = fragments.size()/2; 
     return Math.round(_start); 
    } 

    public void setCount() { this._count = fragments.size(); } 

    @Override 
    public int getCount() { return this._count; } 

    // You will need to change this to get the appropriate title per page  
    @Override 
    public CharSequence getPageTitle(int position) { 
     switch (position) { 
     case 0: 
      return getString(R.string.company_select).toUpperCase(Locale.ENGLISH); 
     case 1: 
      return getString(R.string.companies_pending).toUpperCase(Locale.ENGLISH); 
     } 
     return null; 
    } 
} 

Пожалуйста, обратите внимание: Вы не предоставили примеры того, что вы пытались так я написал код для вас. StackOverflow не место для этого, в будущем, когда что-то не работает, дайте нам то, что вы пробовали, и мы постараемся помочь определить, что пошло не так.

+0

Asok спасибо за вашу помощь! позвольте мне попробовать ваш код! – 2013-04-08 14:37:26

+0

Asok спасибо за ваш ответ !! – 2013-04-08 14:53:33

Смежные вопросы