在 instantiateItem 上创建更多项,而不是默认只创建一个

Creates more items on instantiateItem and not only one as default

我有一个带箭头的适配器 (FragmentStatePagerAdapter),每次点击都会创建下一页:

    leftArrow.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            viewPager.setCurrentItem(viewPager.getCurrentItem() - 1);
        }
    });
    rightArrow.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);

        }
    });

@Override
public Object instantiateItem(ViewGroup collection, int position) {
    int i=0;
    for (i=position; i<position+2;i++){
    MyPage currentPage = pages.get(i);
    if(page == null){
        currentPage = new MyPage(i);
        pages.put(i, page);     
        super.instantiateItem(collection, i);
    }
    }

    return super.instantiateItem(collection, position);
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    MyPage pageToRemove = pages.get(position);
    if(pageToRemove != null){
        pageToRemove.dispose();
        pages.remove(position);
    }
    super.destroyItem(container, position, object);
}
}

我想在每次迭代时创建 3 页而不是 1 页,因为我在分页时有延迟。我试图创建页面并将它们插入数组,但问题是我只有一个 return return return super.instantiateItem(collection, position);

有什么想法我怎样才能再调用它几次?

Any ideas how can I call it few more times?

您不是发出号召的人 -- ViewPager 是。您可以调用 setOffscreenPageLimit() 来增加 ViewPager 将缓存的页面数。默认情况下,该值为 1,这意味着 ViewPager 将缓存 3 个页面(当前页面,两侧各加一个)。将其设为 2 将 ViewPager 缓存 5 个页面,依此类推。

切记:

  • 这会减慢 ViewPager 的设置速度,因此它并不是解决慢速页面的真正方法

  • 这会消耗更多的堆 space