我有一个带有一些 View 的 ViewPager。我想在最后一个右滑后转到第一个。
我试过了
@Override
public Fragment getItem(int arg0) {
int i = arg0 % fragmentList.size();
return fragmentList.get(i);
}
@Override
public int getCount() {
return fragmentList.size()+1;
}
但是我得到了一个错误
E/AndroidRuntime(22912): java.lang.IllegalStateException: Fragment already added: RubricFragment{4136cd80 #1 id=0x7f06000c android:switcher:2131099660:0}
最佳答案
一种可能性是像这样设置屏幕:
C' A B C A'
C' 看起来就像 C,但是当你滚动到那里时,它会将你切换到真正的 C。 A' 看起来就像 A,但是当您滚动到那里时,它会将您切换到真正的 A。
我会通过实现 onPageScrollStateChanged 来做到这一点像这样:
@Override
public void onPageScrollStateChanged (int state) {
if (state == ViewPager.SCROLL_STATE_IDLE) {
int curr = viewPager.getCurrentItem();
int lastReal = viewPager.getAdapter().getCount() - 2;
if (curr == 0) {
viewPager.setCurrentItem(lastReal, false);
} else if (curr > lastReal) {
viewPager.setCurrentItem(1, false);
}
}
}
请注意,这调用了 setCurrentItem 的替代形式并传递 false
使跳转立即发生而不是平滑滚动。
我认为这有两个主要缺点。首先,到达任一端后,用户必须让滚动稳定下来才能继续。其次,这意味着在您的第一页和最后一页中拥有所有 View 的第二个副本。根据您的屏幕的资源密集程度,可能会排除此技术作为可能的解决方案。
另请注意,由于 View 分页器在滚动稳定之前不会让点击进入底层控件,因此不为 A' 和 C' fragment 设置点击监听器等可能没问题。
编辑:现在我自己实现了这个,还有另一个相当大的缺点。当它从 A' 切换到 A 或从 C' 切换到 C 时,屏幕会闪烁片刻,至少在我目前的测试设备上是这样。
关于android - 如何制作 ViewPager 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10188011/