Android 无限 ViewPager 项目顺序

Android Infinite ViewPager items in order

我正在尝试像这样添加 Infinite ViewPager

A <--> B <--> C <--> D <--> A <--> B...

我使用了这个 webside 的 hack,但该解决方案没有按顺序显示项目。

有什么方法可以使用当前代码按顺序显示它们,或者有更好的解决方案吗?

我知道有很多类似的问题,但我找不到适合我需要的答案。

我正在使用 android.support.v4.view.ViewPager

我的Activity:

ViewPager mPager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_infinite_view_pager);
    mPager = (ViewPager) findViewById(R.id.frame);
    mPager.setOffscreenPageLimit(1);
    mPager.setAdapter(new EndLessAdapter(this, mImageArray));
    mPager.setCurrentItem(Integer.MAX_VALUE / 2);
}

private int[] mImageArray = { R.drawable.image1, R.drawable.image2,
        R.drawable.image3, R.drawable.image4 };

我的 PagerAdapter:

FragmentActivity activity;
int imageArray[];

public EndLessAdapter(FragmentActivity act, int[] imgArra) {
    imageArray = imgArra;
    activity = act;
}

public int getCount() {
    return Integer.MAX_VALUE;
}

private int pos = 0;

public Object instantiateItem(View collection, int position) {

    ImageView mwebView = new ImageView(activity);
    ((ViewPager) collection).addView(mwebView, 0);
    mwebView.setScaleType(ScaleType.FIT_XY);
    mwebView.setImageResource(imageArray[pos]);

    if (pos >= imageArray.length - 1)
        pos = 0;
    else
        ++pos;

    return mwebView;
}

@Override
public void destroyItem(View arg0, int arg1, Object arg2) {
    ((ViewPager) arg0).removeView((View) arg2);
}

@Override
public boolean isViewFromObject(View arg0, Object arg1) {
    return arg0 == ((View) arg1);
}

@Override
public Parcelable saveState() {
    return null;
}

问题是您保留了一些变量 'pos' 来处理图像的变化,但是如果项目以其他顺序或多次实例化,它会得到 'out of sync',那就是反正也不需要。

您应该改用 modulo

在你的方法中 instantiateItem

您可以通过以下方式进行:

mwebView.setImageResource(imageArray[position % imageArray.length]);