0

当我用无穷无尽的项目调用setCurrentItem(int pos)方法时,如果新位置比当前位置至少小 2,则会被阻塞。如果新位置比旧位置小 1 或大于旧位置,则工作正常。出于测试目的,我将最大数量更改为 300,没有被阻止。它看起来像迭代项目计数以匹配新位置,在我的情况下,项目计数是. 该块持续约 20-30 秒,然后正确地到达所需位置。这是适配器ViewPagerUIViewPagerUIViewPagerInteger.MAX_VALUEUI

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(int pos)方法,但是有一些私有方法使得这样做是不可能的。我也尝试复制该类,但是 . 有一个问题PagerAdapter,它具有由ViewPager. 请提供任何解决方案以避免UI阻塞。提前致谢。

4

1 回答 1

1

默认情况下,如果已经通过当前适配器的第一个布局,则setCurrentItem(int pos)隐式调用应将视图转换动画为平滑滚动。ViewPager因此,您锁定的一些时间可能来自ViewPager尝试在屏幕之间绘制平滑滚动,特别是如果它必须Fragment在过渡中创建 s。

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

于 2018-06-14T16:31:58.517 回答