Android 无休止的ViewPager:setCurrentItem(int pos)在新位置小于当前位置至少2时阻止UI

Android 无休止的ViewPager:setCurrentItem(int pos)在新位置小于当前位置至少2时阻止UI,android,android-viewpager,endlessadapter,Android,Android Viewpager,Endlessadapter,当我调用ViewPager上的setCurrentItem(int pos)方法时,如果新位置小于当前位置至少2,则UI将被阻止。如果新位置小于1或大于旧位置,ViewPager工作正常。出于测试目的,我将max number更改为300,UI未被阻止。它看起来像是ViewPager遍历items count以匹配新位置,在我的例子中item count是Integer.MAX\u VALUE。UI块持续约20-30秒,然后正确地转到所需位置。这是适配器 public class DateCou

当我调用
ViewPager
上的
setCurrentItem(int pos)
方法时,如果新位置小于当前位置至少2,则
UI
将被阻止。如果新位置小于1或大于旧位置,
ViewPager
工作正常。出于测试目的,我将max number更改为300,
UI
未被阻止。它看起来像是
ViewPager
遍历items count以匹配新位置,在我的例子中item count是
Integer.MAX\u VALUE
UI
块持续约20-30秒,然后正确地转到所需位置。这是适配器

public class DateCountVPAdapter extends FragmentStatePagerAdapter {

public DateCountVPAdapter(Date startDate, FragmentManager fm) {
    super(fm);
    this.startDate = startDate;
    calendar = Calendar.getInstance();
    calendar.setTime(startDate);
}

private Date startDate;
private Calendar calendar;

@Override
public DateCountVPFragment getItem(int position) {
        Calendar currentDate = (Calendar)calendar.clone();
        currentDate.add(Calendar.DAY_OF_MONTH, position);
        return DateCountVPFragment.newInstance(startDate, currentDate.getTime());
}

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


我还尝试扩展
ViewPager
并修改
setCurrentItem(intpos)
方法,但是有一些私有方法无法做到这一点。我还试图复制这个类,但是
PagerAdapter
出现了一个问题,它使用了
ViewPager
使用的包私有方法。请提供任何避免
UI
阻塞的解决方案。提前感谢。

默认情况下,
setCurrentItem(int-pos)
隐式调用,如果
ViewPager
已使用当前适配器完成其第一次布局,则视图转换应设置为平滑滚动的动画。因此,您的一些时间锁定可能来自
ViewPager
试图在屏幕之间绘制平滑滚动,尤其是在转换过程中必须创建
片段的情况下


您的第一步应该是使用
setCurrentItem(int-pos,boolean-smoothScroll)
,除非您真正关心平滑滚动。

谢谢您的支持,但这与转换无关,我已经尝试过了。它实际上挂在以下循环中的
populate(int newCurrentItem)
ViewPager的
方法中:
for(int pos=mCurItem+1;pos
其中
N
Integer.MAX\u值
。我想我会使用
RecyclerView
来代替。。。如果在
ViewPager
中检查新位置是否小于旧位置会更好,以便使用反向循环。如果必须使用ViewPager,我建议使用较小的值。您可以比Integer.MAX_值小很多,但最终用户仍然可以看到无休止的滚动。我最近有一个类似的例子,它是许多物品的旋转木马,收集大小为*1000。它比max int小得多,这导致遍历所需的时间要小得多。在日历中,假设从MaxInt/2开始,每个方向都有将近300万年。