一尘不染

双向无限/动态ViewPager

java

有一个使用-情况ViewPager我从来没见过漂亮的实现。

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以下,而是可以使用Integer类型的整个范围。
可能不是基于数组的实现(从0到无穷大)。

我发现了这个“hack”:动态地向viewpager添加视图和从视图中删除视图,
但是正如我之前所说,我试图使其自然运行,而不是维持3,5,…项,并强制ViewPager更改当前位置在一些扭曲的逻辑上

当前是否有足够的实施方案或有必要实施?
如果这是全新的实施方式,我愿意悬赏悬赏。


阅读 202

收藏
2020-12-03

共1个答案

一尘不染

这会有所帮助吗?

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

2020-12-03