外部RecyclerView没有收到内部Recyclerview的滚动事件

我遵循本教程来实现隐藏工具栏和FAB滚动时的行为: https ://mzgreen.github.io/2015/06/23/How-to-hideshow-Toolbar-when-list-is-滚动(第3部分)/

我粘贴了一个下面的行为的样子。

滚动与晶圆厂

现在,而不是在仅持有textView的tabs中的recyclerview中的单个项目,我已经编码它,以便他们拥有一个图片(ImageView),并在它下面,一个recyclerview显示项目列表。

因此,有一个外部recyclerview包含内部recyclerviews列表。

内部recyclerview不滚动 – 我通过覆盖方法canScrollVertically()在此线程中遵循答案禁用它: 禁用在子Recyclerview android中的滚动 。 我也尝试启用滚动的内部recyclerview,但我遇到了同样的问题。

outer recyclerview会滚动并具有显示/隐藏工具栏和FAB的行为。

当我通过按住图片(ImageView)进行滚动时,应用程序行为完美地工作,显示和隐藏工具栏和FAB。 但是,当我用手指在内部recyclerview上进行滚动时,外部回收站视图会滚动并且列表上下移动,但显示/隐藏工具栏和FAB的行为从未激活。

我有一种感觉,这是因为内部recyclerview拦截了滚动和外部recyclerview没有得到滚动事件来激活的行为。

有谁知道如何确保外部recyclerview也获得滚动事件,使行为的作品?

Solutions Collecting From Web of "外部RecyclerView没有收到内部Recyclerview的滚动事件"

汉克穆迪评论实际上让我正确的答案 – 谢谢汉克!

这是我解决我的问题的方法:

  1. 创build一个'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,滚动事件将被正确地传递给你的父回收站,这将激活应用程序的scrollbehavior。

如果您想将垂直回收站放在另一个垂直回收站,则必须为子回收站视图设置固定的高度,或尝试覆盖此方法

 @Override public boolean dispatchTouchEvent(MotionEvent ev){ //false - block scrolling of parent recycler and allow scrolling for child return false; } 

你有没有尝试在内部recyclerview的xml中使用以下内容?

 app:layout_behavior="@string/appbar_scrolling_view_behavior" 

编辑:假设你正在使用CoordinatorLayout。