17

ViewPagerかなり実装されているのを見たことがないユースケースが 1 つあります。

ViewPager多かれ少なかれ静的な構造です。Pages を右側に追加する (Model に追加して表示する) ことはそれほど難しくありませんが、PagerAdapter (またはそのサブクラスの一部) を拡張して両方向に拡張できるようにするための使いやすいソリューションが必要です。

このようなアダプターのインターフェースを想像できます

boolean isEmpty()
boolean hasNext()
boolean hasPrevious()
Object  getNext()
Object  getPrevious()
Object  getItem(int position)

// or if using generics
T       getNext()
T       getPrevious()
T       getItem(int position)

Collections Iterator に似ていますが、双方向です。

ここで、インデックス/位置は 0 の下から制限されませんが、整数型の全範囲を使用できます。
実装を配列 (0 から無限) に基づいていない可能性があります。

私はこの「ハック」を見つけました: viewpager にビューを動的に追加および削除します
しかし、前に述べたように、3,5,... アイテムを維持せずに、ViewPager に現在の位置ベースの変更を強制することなく、自然に機能させようとしています。ねじれた論理で

現在、十分な実装がありますか、それとも実装する必要がありますか?
まったく新しい実装になる場合は、報奨金の回答を喜んで提供します。

4

2 に答える 2

10

これは役に立ちますか、

public static class MyAdapter extends FragmentPagerAdapter {
    public MyAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public int getCount() {
        return Integer.MAX_VALUE;
    }

    @Override
    public Fragment getItem(int position) {
        return getFragmentBasedOnPosition(position);
    }

    private Fragment getFragmentBasedOnPosition(int position) {
        int fragmentPos = position % 3; // Assuming you have 3 fragments
        switch(fragmentPos) {
            case 1:
            return Fragment1.newInstance();
            case 2:
            return Fragment2.newInstance();
            case 3:
            return Fragment3.newInstance();
        }
    }
}

その後、

mPager.setCurrentItem((int)(Integer.MAX_VALUE/2));// mPager が ViewPager であると仮定します

于 2013-05-21T13:00:02.013 に答える