私が理解していることから、 /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 はこのための場所ではありません。将来、何かがうまくいかない場合は、あなたが試したことを私たちに教えてください。