RecyclerView中的RecyclerView无法滚动

7

我有一个使用GridLayoutManager的RecyclerView,其子项可能包含垂直的RecyclerView。这是屏幕截图:

enter image description here

我已经为这种情况创建了适配器。它可以正确显示,但是无论内部有多少项,内部的Recyclerview都不会滚动。有人能建议如何使内部和主要的RecyclerView滚动吗?

3
你是否设置了 rv.setNestedScrollingEnabled(false) - Piyush
是的,我尝试过,但没有成功。 - Khawar Raza
1个回答

30

我找到了解决方案。只需要在Recyclerview接收到触摸事件的情况下禁用父级的触摸事件即可。这里是对我有用的代码片段:

RecyclerView.OnItemTouchListener mScrollTouchListener = new RecyclerView.OnItemTouchListener() {
    @Override
    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
        int action = e.getAction();
        switch (action) {
            case MotionEvent.ACTION_MOVE:
                rv.getParent().requestDisallowInterceptTouchEvent(true);
                break;
        }
        return false;
    }

    @Override
    public void onTouchEvent(RecyclerView rv, MotionEvent e) {

    }

    @Override
    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

    }
}; 

recyclerView.addOnItemTouchListener(mScrollTouchListener);

我在这里找到答案:Recyclerview inside Scrollview


3
这是给子视图应用的。效果非常好。 - Fattum
即使您在触摸项目后垂直滚动,它仍位于水平滚动的范围内。 - 최봉재
1
它将防止在您开始滚动子元素后父元素滚动。 - Cyph3rCod3r
这很棒。但我需要在子RecyclerView中稍微暂停一下手指,这样我才能滚动它。因此,我将MotionEvent.ACTION_MOVE更改为MotionEvent.ACTION_DOWN,这样它就可以更好地工作。 - zihadrizkyef

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接