Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 双向无限制/动态ViewPager_Java_Android_Dynamic_Collections - Fatal编程技术网

Java 双向无限制/动态ViewPager

Java 双向无限制/动态ViewPager,java,android,dynamic,collections,Java,Android,Dynamic,Collections,有一个ViewPager的用例,我从未见过它的实现 ViewPager或多或少是静态结构。将页面添加到右侧并不难(添加到模型并显示它),但是,应该有一个很好的解决方案来扩展PagerAdapter(或它的一些子类),以便它可以在两个方向上扩展 我可以想象这样的适配器接口 boolean isEmpty() boolean hasNext() boolean hasPrevious() Object getNext() Object getPrevious() Object getItem(

有一个
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)
类似于集合迭代器,但都是定向的

其中索引/位置不受0的限制,但可以使用整数类型的整个范围。
可能不是基于数组(从0到无限)的实现

我发现了这个“黑客”:
但正如我之前所说的,我试图让它自然工作,而不是保持3,5,。。。项目并强制ViewPager根据某些扭曲的逻辑更改当前位置

目前是否有足够的实施或有必要实施?

如果答案是一个全新的实现,我愿意悬赏。

使用负位置值与ViewPager使用的自然顺序相去甚远,根本不是适配器问题。请查看Android SDK中支持包source中ViewPager的源代码。例如,下面是一个setCurrentItemInternal私有实现:

void setCurrentItemInternal(int item, boolean smoothScroll, boolean always, int velocity) {
    if (mAdapter == null || mAdapter.getCount() <= 0) {
        setScrollingCacheEnabled(false);
        return;
    }
    if (!always && mCurItem == item && mItems.size() != 0) {
        setScrollingCacheEnabled(false);
        return;
    }

    if (item < 0) {
        item = 0;
    } else if (item >= mAdapter.getCount()) {
        item = mAdapter.getCount() - 1;
    }
    final int pageLimit = mOffscreenPageLimit;
    if (item > (mCurItem + pageLimit) || item < (mCurItem - pageLimit)) {
        // We are doing a jump by more than one page.  To avoid
        // glitches, we want to keep all current pages in the view
        // until the scroll ends.
        for (int i=0; i<mItems.size(); i++) {
            mItems.get(i).scrolling = true;
        }
    }
    final boolean dispatchSelected = mCurItem != item;
    populate(item);
    scrollToItem(item, smoothScroll, velocity, dispatchSelected);
}
void setCurrentItemInternal(整数项、布尔平滑滚动、布尔始终、整数速度){
如果(mAdapter==null | | mAdapter.getCount()=mAdapter.getCount()){
item=mAdapter.getCount()-1;
}
final int pageLimit=mOffscreenPageLimit;
如果(项目>(mCurItem+pageLimit)|项目<(mCurItem-pageLimit)){
//我们正在跳转一页以上。为了避免
//出现问题时,我们希望在视图中保留所有当前页面
//直到滚动结束。
对于(inti=0;i这会有帮助吗

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_值/2))
//假设mPager是您的ViewPager

我们可以在ViewPager中添加任意数量的视图..我已经在我的一个应用程序中实现了相同的功能。请看一下@FoamyGuy ViewPager的简单演示,其中我们可以在@Pragnani中拥有无限数量的页面,但您只朝着正确的方向扩展,我正在尝试动态地向两个方向扩展,没有黑客。@Pragnani你可以添加无限的页面,但只能在一个方向上添加。我认为他的问题是不同的。@MarekSebera最近发现了它……我想知道谷歌日历是如何实现的?它感觉像一个无限的浏览页面,因为你可以在一天中不断向左向右滚动。结论是什么?我不想使用neg临时索引。根据我的自定义模型,我需要在两个方向上无限制地遍历集合。我直接说,解决方案可能不基于数组,因为我们必须处理负索引。您写道:“其中索引/位置不受0的限制,但可以使用整型的整个范围。”您想在何处使用这些索引?如果在get/set current page或onChange handler中,则会出现上述问题。如果负面索引对ViewPager不可见,则具有此类索引的意义是什么?请详细说明…我在讨论可能元素的范围,在接口大纲中,我不需要索引,但我需要exp在两个方向上动态地调用集合。因此,调用getPreviousItem不会在元素(0)上结束,而是取决于在自定义模型中实现的其他条件。因此,如果我理解正确,这个问题可以简化为使用getModelPostion(item)扩展普通列表方法和扩展列表。使用代码添加,更新positon modelPosition映射。我说的对吗?您可以使其在两个方向上循环,并使其产生无限制页面的效果。同时在下一个或上一个循环槽中更改查看页面的内容,如前5页的内容将有所不同,下5页的内容将有所不同tent get changes,对于最后5个内容从历史记录中获取更改,您必须为每个插槽(5页)维护历史记录。这会有所帮助,谢谢,但在我看来这仍然是一个奇怪的解决方案。它不适用于FragmentStatePagerAdapter,因为它需要计算每个片段。并导致内存溢出