我的实现是"无限滚动"在ViewPager中高效

时间:2015-12-28 03:28:50

标签: java android android-fragments android-viewpager fragmentstatepageradapter

我正在使用带有FragmentStatePagerAdapter的ViewPager来显示图像。我能够成功显示图像,现在我正在努力实现"无限滚动"。 "无限滚动"意味着我能够在到达最后一张图像时循环到第一张图像&我将循环到第一张图片的最后一张图片。下面是"无限滚动"为了澄清。

"无限滚动" :(... C< - < - > C< - > A ...)

我的代码实现如下:

/* PagerAdapter class */
public class SlidePagerAdapter extends FragmentStatePagerAdapter {
    private int urlPicArryIndex = 0;

    public SlidePagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public int getCount() {
        return NUM_ITEMS;
    }

    @Override
    public Fragment getItem(int position) {

        System.err.println("orignal position = " + position);

        position = position % urlPicArray.size();
        urlPicArryIndex = position;

        System.err.println("urlPicArryIndex = " + urlPicArryIndex);
        System.err.println("position = " + position + ",     NUM_ITEMS = " + NUM_ITEMS);

        return PictureSectionFragment.newInstance(position, urlPicArray.get(urlPicArryIndex));
    }
}

以下是上面代码段中未显示的变量设置:

NUM_ITEMS 设置为800

urlPicArray 是另一种方法中设置的图像的数组列表。

我的代码适用于"无限滚动"但是,我担心这不是有效的。通过将 NUM_ITEMS 设置为800,这是否会将大量的片段空间留在内存中?顺便说一下,我意识到这不是真正的无限滚动,但对大多数现实世界的用例来说应该足够了。

我刚刚进入android dev,所以任何帮助/指导都会非常感激!

1 个答案:

答案 0 :(得分:0)

一旦你只需要图片,你在这里真的不需要Fragment:简单的View就足够了(阅读:BigNerdRanch: ViewPager Without Fragments)。并且已经为ViewPager编写了antonyt/InfiniteViewPagerimbryk/LoopingViewPager(以及其他许多其他人)扩展程序。

检查以下问题:

关于你的代码,它会像其他人一样利用相同的想法(这是一个好消息!)。可以改进的地方 - 如果视图/片段的数量很小,则用Integer.MAX_VALUE更改NUM_ITEMS - 我会避免一遍又一遍地重新创建它们并用已经实例化的副本替换它们(即存储实例化的视图/片段)并在以后重复使用。)

但请再次检查这个答案:https://stackoverflow.com/a/12965787/1658267 - 我认为这很棒。