Android 如何在水平循环视图中禁用片段滚动

Android 如何在水平循环视图中禁用片段滚动,android,android-studio,kotlin,android-fragments,android-recyclerview,Android,Android Studio,Kotlin,Android Fragments,Android Recyclerview,我有一个水平的recyclerView,我用ImageView填充它,这样当用户从右向左滑动时,其余的图像一个接一个地出现。一切正常,图像加载,水平滚动按预期工作,甚至单个项目的ClickListener也工作正常 但是。。。如果向右滚动的触摸手势不是纯水平滑动(如果用户到达recyclerView末端并想返回,则向左),加载recyclerView的片段也会向下滚动。我希望避免这种行为,这样当用户想要到达从右向左切换的图像时,recyclerView只在水平方向上移动,而忽略在recycler

我有一个水平的recyclerView,我用ImageView填充它,这样当用户从右向左滑动时,其余的图像一个接一个地出现。一切正常,图像加载,水平滚动按预期工作,甚至单个项目的ClickListener也工作正常

但是。。。如果向右滚动的触摸手势不是纯水平滑动(如果用户到达recyclerView末端并想返回,则向左),加载recyclerView的片段也会向下滚动。我希望避免这种行为,这样当用户想要到达从右向左切换的图像时,recyclerView只在水平方向上移动,而忽略在recyclerView上执行的任何垂直移动。如果用户在recyclerView屏幕区域之外轻触或滑动,我希望出现通常的行为(按预期向下滚动)。我已经尝试过在这个网站上看到的其他替代方法,比如使用setOnTouchListener选项来检测运动事件并相应地采取行动,您可以在下面查看(这是我片段中的实际代码):

在这种情况下,ACTION_UP的意思是沿着recyclerView的方向,因此它只检测recyclerView内部的移动,并将垂直移动“传递”给向下滚动的父对象(片段)

如何“阻止”回收视图以忽略任何垂直滑动,而仅水平移动?

val viewManager=LinearLayoutManager(requireContext(),LinearLayoutManager.HORIZONTAL,false)
myRecylcerView?.layoutManager=viewManager
上面的代码片段只允许基于您的问题进行水平滚动,但我猜是其他原因导致了问题,比如您可能正在使用NestedScrollView/ScrollView,因此请提供布局文件和示例视频以清晰地了解问题

更新-2020年9月25日

您可以在NestedScrollView和recylcerview中尝试以下操作


// .....
// .....

谢谢你的回复,哈什·拉戈尔。您是对的,问题来自NestedScrollView,它是布局的一部分。RecyclView位于NestedScrollView内部,当我将其置于NestedScrollLayout外部时,它会按预期工作,但现在它总是需要固定的屏幕空间来显示RecyclView,出于设计原因,这是不可取的。是否可以仅在RecyclerView上禁用NestedScrollView的滚动?(即,我希望NestedScrollView在水平RecyclerView上执行向下滑动时忽略向下滑动)@Franbede,我已经更新了答案,如果更新的解决方案无法解决您的问题,请附上布局文件。
advertPicturesRecyclerView.setOnTouchListener { recyclerView, motionEvent ->
        when(motionEvent.action) {
            MotionEvent.ACTION_UP -> {
                Snackbar.make(recyclerView, "Touch down!", Snackbar.LENGTH_LONG).show()
                recyclerView.parent.requestDisallowInterceptTouchEvent(true)
                true
            }
            else -> {
                recyclerView.parent.requestDisallowInterceptTouchEvent(false)
                true
            }
        }
    }