android - 当嵌套的 Recyclerview 滚动方向与父 RecyclerView 相同时如何启用它

标签 android android-recyclerview

我必须将一个 RecyclerView(嵌套)放在另一个 RecyclerView(父级)的 ViewHolder 中。 nestedparent 都有固定的高度。 nested 放置在parent 的底部。

如果我将 parent 与 LinearLayoutManager.VERTICAL 一起使用,并将 nested 与 LinearLayoutManager.HORIZONTAL 一起使用,一切都会按预期工作,但如果两个 RecyclerView 的方向相同,则 < strong>nested 听不到move 事件——因此无法滚动。

遇到这种情况怎么办?我怎样才能让 RecyclerViews 水平滚动,并且能够将 nestedparent 分开滚动?

谢谢!

最佳答案

在我的例子中,我在 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/

相关文章:

java - react-native .58.1 无法构建 Android 版本

android - 可在 MaterialButton android 上绘制的选择器

android - ItemDecoration - 如何创建垂直分隔线?

java - Android 中的回收器 View 无法点击

android - 是否可以将 ViewPager 添加到 DialogFragment 中?

java - 将非特定类传递给另一个类

java - 我如何为每个单独的 recyclerView 设置数据?

android - 如何获取 RecyclerView 项目计数?

android - 监听来自 java 的 javascript 函数调用 - Android

android - 将偏移应用于 GridLayout 项目并在所有项目之间保持相同的大小