gpt4 book ai didi

android - 外部 Recyclerview 未收到内部 Recyclerview 的滚动事件

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

我按照本教程实现了滚动时隐藏工具栏和 FAB 的行为:https://mzgreen.github.io/2015/06/23/How-to-hideshow-Toolbar-when-list-is-scrolling(part3)/

我在下面粘贴了该行为的演示。

scrolling with fab

现在,标签中的 recyclerview 中的那些单独的项目不再只包含一个 textView,我对其进行了编码,以便它们包含一张图片 (ImageView) 并在其下方显示一个显示项目列表的 recyclerview。

因此,有一个包含内部回收 View 列表的外部回收 View 。

内部 recyclerview 不滚动 - 我通过重写方法 canScrollVertically() 遵循此线程中的答案来禁用它:Disable Scrolling in child Recyclerview android .我也尝试为内部回收 View 启用滚动,但我遇到了同样的问题。

外部的 recyclerview 确实滚动并具有显示/隐藏工具栏和 FAB 的行为。

当我通过按住图片 (ImageView) 进行滚动时,应用程序的行为非常好,显示和隐藏工具栏和 FAB。但是,当我将手指放在内部 recyclerview 上滚动时,外部 recyclerview 滚动并且列表上下移动,但是显示/隐藏工具栏和 FAB 的行为永远不会被激活。

我感觉这是因为内层recyclerview拦截了scroll,外层recyclerview没有得到scroll事件激活行为。

有谁知道如何确保外部 recyclerview 也获得滚动事件以便该行为有效?

最佳答案

Hank Moody 的评论实际上让我找到了正确的答案 - 谢谢 Hank!

我是这样解决问题的:

  1. 创建一个'Scroll Through' recyclerview,父级将通过执行以下操作接收子级的所有滚动事件:

    public class ScrollThroughRecyclerView extends RecyclerView {
    public ScrollThroughRecyclerView(Context context) {
    super(context);
    }

    public ScrollThroughRecyclerView(Context context, AttributeSet attrs) {
    super(context, attrs);
    }

    public ScrollThroughRecyclerView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev){
    //true - block scrolling of child and allow scrolling for parent recycler
    return true;
    }
    }
  2. 在您的 xml 或 java 代码中使用此自定义 recyclerview,滚动事件将正确传递到您的父 recyclerview,这将激活应用滚动行为。

关于android - 外部 Recyclerview 未收到内部 Recyclerview 的滚动事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32291057/

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