我可以通过扩展ViewPager来禁用ViewPager以使用setPagingEnabled方法,但现在我只是想暂时禁用一个孩子。
我怀疑我必须通过访问ViewPager的setScrollState方法来覆盖OnPageScrolled并取消滚动,但我无法弄清楚如何。
答案 0 :(得分:7)
这就是我的解决方案:
public class NonSwipeableViewPager extends ViewPager {
private boolean swipe = true;
public boolean isSwipe() {
return swipe;
}
public void setSwipe(boolean swipe) {
this.swipe = swipe;
}
public NonSwipeableViewPager(Context context) {
super(context);
}
public NonSwipeableViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent arg0) {
if (swipe) {
return super.onInterceptTouchEvent(arg0);
}
// Never allow swiping to switch between pages
return false;
}
}
答案 1 :(得分:1)
这是我为禁用ViewPager
的第一个页面所做的工作。我没有使用状态变量,而是使用了ViewPager.getAdapter()
并检查了是否应该允许滑动:
public class CardViewPager extends ViewPager {
public CardViewPager(Context context) {
super(context);
}
public CardViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void setCurrentItem(int item) {
if ((((CardFragmentAdapter) this.getAdapter()).isFirstItemDisabled())
&& (item == 0)) {
Log.d("ViewPager", "You don't wanna see this.");
return;
}
super.setCurrentItem(item);
}
}
当然,如果您因某些原因不想删除页面,这是合乎逻辑的。
例如,如果要禁用第二项,则可以super.setCurrentItem(item+1)
或类似内容。