Хорошо от того, что я понимаю, у вас есть список 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 не место для этого, в будущем, когда что-то не работает, дайте нам то, что вы пробовали, и мы постараемся помочь определить, что пошло не так.
@AbhishekSabbarwal Спасибо за ваш ответ Позвольте мне проверить ссылку – 2013-04-08 08:20:53
@AbhishekSabbarwal Я хочу, чтобы viewpager в обоих направлениях не в одном направлении! – 2013-04-08 08:25:22
вы можете сделать это с помощью этой библиотеки и установить ориентацию пейджера горизонтально и вертикально [здесь] (http://stackoverflow.com/questions/10720276/error-including-android-directionalviewpager-jar-in-eclipse/14268702#14268702) – sheetal