我有一个viewpager,在其中一个片段中,我有两个包含垂直和水平recyclerview的不同片段。
当我将水平recyclerview滚动到最后一个项目并尝试继续滑动时,viewpager会滚动到下一页。我不希望这种情况发生。我想在尝试overscroll水平recyclerview时禁用viewpager的分页。
但是,我不希望在其他任何位置滑动时禁用viewpager的分页。例如,如果我在垂直recyclerview或父片段中的任何空白处滑动,则仍应导致viewpager更改页面。
我在此SO问题中阅读了如何禁用viewpager的分页。此外,此SO问题也类似于有一个子viewpager,但是我尝试使用水平recyclerview复制它时没有成功。
以下是一些结构:
自定义的viewpager,允许我禁用分页(从上面的第一个SO链接中获取):
public class CustomViewPager extends ViewPager {
private boolean enabled;
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
this.enabled = true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (this.enabled) {
return super.onTouchEvent(event);
}
return false;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
if (this.enabled) {
return super.onInterceptTouchEvent(event);
}
return false;
}
public void setPagingEnabled(boolean enabled) {
this.enabled = enabled;
} }
对于水平的RecyclerView,我设置了一个ontouchlistener(类似上面第二个SO链接):
horizontalRecyclerView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()){
case MotionEvent.ACTION_MOVE:
customViewPager.setPagingEnabled(false);
break;
case MotionEvent.ACTION_UP:
customViewPager.setPagingEnabled(true);
break;
}
return false;
}
});
额外观察:我注意到有时如果我在滑动之前长按水平recyclerview,它不会进入viewpager的下一页。但是,如果我快速滑动,viewpager就会进入下一页。
有人知道正确的方法吗?
感谢任何帮助。