双向无限/动态ViewPager

Mar*_*era 16 java collections android dynamic

有一个用例,ViewPager我从来没有见过相当实现.

ViewPager或多或少的静态结构.将页面添加到右侧(附加到模型并显示它)并不困难,但是,应该有一个很好用的解决方案来扩展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)
Run Code Online (Sandbox Code Playgroud)

与Collections Iterator类似,但都是双向的.

索引/位置不限于0以下,但可以使用整个范围的整数类型.
也许不是基于数组的实现(从0到无限).

我发现这个"hack":动态添加和删除view到viewpager
但是正如我之前所说,我试图让它自然地工作,而不是维护3,5,...项目并强制ViewPager更改当前位置在一些扭曲的逻辑上

目前是否有足够的实施或是否有必要实施它?
如果这将是一个全新的实施,我愿意赏金奖励回答.

Sag*_*are 8

这会有帮助,

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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,

mPager.setCurrentItem((int)(Integer.MAX_VALUE/2)); //假设mPager是您的ViewPager

  • 它不适用于FragmentStatePagerAdapter,因为它需要计算每个片段.并导致内存溢出 (4认同)