我必须将一个 RecyclerView(嵌套)放在另一个 RecyclerView(父级)的 ViewHolder 中。 nested 和parent 都有固定的高度。 nested 放置在parent 的底部。
如果我将 parent 与 LinearLayoutManager.VERTICAL 一起使用,并将 nested 与 LinearLayoutManager.HORIZONTAL 一起使用,一切都会按预期工作,但如果两个 RecyclerView 的方向相同,则 < strong>nested 听不到move 事件——因此无法滚动。
遇到这种情况怎么办?我怎样才能让 RecyclerViews 水平滚动,并且能够将 nested 与 parent 分开滚动?
谢谢!
最佳答案
在我的例子中,我在 parent 的底部有一个 nested 我使用了一个自定义的 RecyclerView.OnItemTouchListener 和一个自定义的 LinearLayoutManager,它们都添加到 < strong> parent 。
在 LinearLayoutManager 中,我创建了一个启用和禁用滚动的方法。
@Override
public boolean canScrollVertically() {
return isScrollEnabled && super.canScrollVertically();
}
@Override
public boolean canScrollHorizontally() {
return isScrollEnabled && super.canScrollHorizontally();
}
public void setScrollEnabled(boolean isScrollEnabled) {
this.isScrollEnabled = isScrollEnabled;
}
在自定义 RecyclerView.OnItemTouchListener 上,我开始检查用户触摸的区域并禁用/启用父级的滚动功能。
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
if (e.getY() > (viewHolderHeight - nestedRecyclerViewHeight)) {
mLayoutManager.setScrollEnabled(false);
} else {
mLayoutManager.setScrollEnabled(true);
}
return false;
}
这是在做什么:每当用户触摸parent 的 Item 时,系统调用 onInterceptTouchEvent,如果用户触摸 nested 应该在的区域,它会禁用parent 的滚动条。如果触摸发生在嵌套区域之外,它会启用它。
我搜索了很多以找到这个答案,实际上混合了一些答案,这些答案使用 Custom LinearLayoutManager 来禁用 recyclerview 的滚动,以及 RecyclerView.OnItemTouchListener 来禁用 RecyclerView 上的任何交互。
希望这对遇到类似问题的其他人有所帮助。
关于android - 当嵌套的 Recyclerview 滚动方向与父 RecyclerView 相同时如何启用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34935568/