其他分享
首页 > 其他分享> > android – 外部Recyclerview没有接收内部Recyclerview的滚动事件

android – 外部Recyclerview没有接收内部Recyclerview的滚动事件

作者:互联网

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

我已经粘贴了下面的行为示例.

scrolling with fab

现在,而不是仅包含textView的选项卡中的recyclerview中的那些单独项目,我已对其进行编码,以便它们保持图片(ImageView)并在其下方显示项目列表的回收者视图.

因此,有一个外部回收者视图,其中包含内部回收者视图列表.

内部的recyclerview不会滚动 – 我通过覆盖方法canScrollVertically():Disable Scrolling in child Recyclerview android来跟踪此线程中的答案来禁用它.我还尝试启用内部回收站视图的滚动,但我遇到了同样的问题.

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

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

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

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

解决方法:

Hank Moody评论实际上引导我找到正确的答案 – 谢谢Hank!

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

>创建一个’Scroll Through’recyclelerview,其中父级将通过这样做接收孩子的所有滚动事件:

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;
    }
}

>在xml或java代码中使用此自定义recyclelerview,滚动事件将正确传递到您的父回收站视图,这将激活应用程序滚动行为.

标签:android,android-recyclerview,android-toolbar,floating-action-button
来源: https://codeday.me/bug/20191001/1837688.html