我编写了一个自定义的ViewPager
来禁用Swipe Scroll
,但我想以编程方式进行滑动。我的视图页中有三个Tab
,但是当我在第一个Fragment
上调用viewPager.setCurrentItem(viewPager.getCurrentItem()+1)
时,它会移动到第三个Fragment
而不是第二个Fragment
。如果我在第二个Fragment
中调用相同的函数,它会进入第三个Fragment
。如果我在第三个Fragment
中调用(viewPager.getCurrentItem()-1)
,则可以通过后退正常工作。任何帮助将不胜感激。以下是我的代码:
NonSwipeAbleViewPager
public class NonSwipeableViewPager extends ViewPager {
private boolean swipeable;
public NonSwipeableViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyViewPager);
try {
swipeable = a.getBoolean(R.styleable.MyViewPager_swipeable, true);
} finally {
a.recycle();
}
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
return swipeable ? super.onInterceptTouchEvent(event) : false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return swipeable ? super.onTouchEvent(event) : false;
}
}
XML中的声明
<co.example.customview.NonSwipeableViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
app:swipeable="false" />
称之为
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menuNext:
NonSwipeableViewPager pages = (NonSwipeableViewPager) getActivity().findViewById(R.id.pager);
pages.setCurrentItem(pages.getCurrentItem()+1, true);
break;
default:
return super.onOptionsItemSelected(item);
}
return super.onOptionsItemSelected(item);
}
ViewPager
可以滑动,为什么不考虑使用ViewSwitcher
或者ViewFlipper
呢? - frogattoViewFlipper
和ViewSwitcher
用于在其中切换附加在其上的多个视图。 - frogatto