2

ViewPagerで作成するにはどうすればよいですかboth direction。出来ますか ?可能であれば、どのように実装できますか。

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);
    }

誰か助けてくれませんか..ありがとう!!

4

1 に答える 1

2

私が理解していることから、 /Fragmentsの途中でユーザーに開始してもらいたいリストがあります。次のコードで遊んでテストしましたが、適切に機能しています。PagesFragments

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

于 2013-04-08T14:34:42.990 に答える