gpt4 book ai didi

android - 当子 recyclerview 滚动到最后一项时禁用 ViewPager 分页

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:21:22 27 4
gpt4 key购买 nike

我有一个 viewpager,在其中一个 fragment 中,我有两个单独的 fragment ,分别包含一个垂直和一个水平的 recyclerview。

当我将水平 recyclerview 滚动到最后一个项目并尝试进一步滑动时,viewpager 滚动到下一页。我不希望这种情况发生。当我尝试过度滚动水平回收 View 时,我想禁用 viewpager 的分页。

但是,我不想在我在其他任何地方滑动时禁用 viewpager 的分页。例如,如果我要在垂直回收 View 或父 fragment 中的任何空白区域上滑动,它仍然会导致 viewpager 更改页面。

我读了in this SO question , 如何禁用 viewpager 的分页。还有 this SO question相似之处在于有一个子 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;
} }

对于水平回收 View ,我设置了一个 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;
}
});

额外观察:我注意到,有时如果我在滑动之前长按水平回收器 View ,它不会转到 viewpager 的下一页。但是,如果我快速滑动,viewpager 将转到下一页。

有谁知道正确的方法吗?

感谢任何帮助。

最佳答案

这是解决方案。

requestDisallowInterceptTouchEvent()

此方法将不允许 parent 移动。它停止 viewpager 触摸事件。

horizontalRecyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
int action = e.getAction();
switch (action) {
case MotionEvent.ACTION_MOVE:
rv.getParent().requestDisallowInterceptTouchEvent(true);
break;
}
return false;
}

@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {

}

@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

}
});

关于android - 当子 recyclerview 滚动到最后一项时禁用 ViewPager 分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38466413/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com