【发布时间】:2015-05-12 04:10:19
【问题描述】:
我写了一个自定义ViewPager 来禁用Swipe Scroll,但我想以编程方式滑动。我的视图寻呼机中有三个Tab,但是当我在第一个Fragment 上调用viewPager.setCurrentItem(viewPager.getCurrentItem()+1) 时,它会移动到第三个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);
}
【问题讨论】:
-
你确定当你按下 menuNext 按钮时,你是在索引 0 的片段上的第一个按钮吗?
-
我想我记得在某些时候像这样使用它时有一些类似的奇怪之处。我只是不记得决议是什么。
-
你试过分离语句吗? int currentItem = pages.getCurrentItem();当前项目++; pages.setCurrentItem(currentItem);
-
我是。我试图让
Log.e("PAGES:", String.valueOf(pager.getCurrentItem()));记录它 有趣的是,如果我在第二个选项卡上并移动到第三个选项卡,它不会记录。但是,如果我在第一个并单击第三个选项卡,它将页面记录为2 -
@JohnP。一样。移动到第三页
标签: android android-fragments android-viewpager