我已使用ViewPager
和TabLayout
实现了布局。因此,有一种方法可以使用水平滑动或点击Tab
来切换页面。我还有其他MenuDrawer
,可以使用以下方式切换页面:
viewPager.setCurrentItem(newPosition, true);
现在我想知道哪个操作切换了页面 - 用户滑动,点击Tab
或打开MenuDrawer
。我知道OnPageChangeListener
和OnTabSelectedListener
,但在所有三种情况下都会调用它们:
viewPager.setOnPageChangeListener(this);
@Override
public void onPageSelected(int i) {
...
tabLayout.setupWithViewPager(viewPager);
tabLayout.setOnTabSelectedListener(this);
@Override
public void onTabSelected(TabLayout.Tab tab) {
...
任何建议如何/在何处识别此操作?
答案 0 :(得分:0)
您可以扩展 ViewPager 并覆盖其method onInterceptTouchEvent(MotionEvent ev)
,以便在第二种情况下处理两个事件MotionEvent.ACTION_DOWN
和MotionEvent.ACTION_MOVE
。创建自己的监听器,帮助您识别用户是否已开始刷页面。
e.g。
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
float x = ev.getX();
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
mStartDragX = x;
break;
case MotionEvent.ACTION_MOVE:
if (mStartDragX < x && getCurrentItem() == 0) {
mListener.onSwipeOutAtStart();
} else if (mStartDragX > x && getCurrentItem() == getAdapter().getCount() - 1) {
mListener.onSwipeOutAtEnd();
}
break;
}
return super.onInterceptTouchEvent(ev);
}
检查您的自定义方法是否被调用可能有助于您确定用户是否已刷过页面或点击了tabSelect