Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android RecyclerView(水平)嵌套在底板中,防止垂直滚动_Android_Android Recyclerview_Androiddesignsupport_Bottom Sheet - Fatal编程技术网

Android RecyclerView(水平)嵌套在底板中,防止垂直滚动

Android RecyclerView(水平)嵌套在底板中,防止垂直滚动,android,android-recyclerview,androiddesignsupport,bottom-sheet,Android,Android Recyclerview,Androiddesignsupport,Bottom Sheet,我有一个回收视图,使用线性布局管理器,方向为水平,嵌套在框架布局中,使用底页行为 当尝试在RecyclerView上垂直拖动时,底页不响应拖动事件。这大概是因为具有水平方向的LayoutManager禁用了垂直滚动 我已尝试重写LinearLayoutManager.canScrollVertically()并返回true。这类作品。。如果以非常小心的方式垂直拖动,底页将响应。但是,一旦涉及任何水平移动,底板将停止响应垂直拖动事件 我不确定覆盖canscrollvertical()是否是正确的方

我有一个
回收视图
,使用
线性布局管理器
,方向为
水平
,嵌套在
框架布局
中,使用
底页
行为

当尝试在
RecyclerView
上垂直拖动时,
底页不响应拖动事件。这大概是因为具有水平方向的
LayoutManager
禁用了垂直滚动

我已尝试重写
LinearLayoutManager.canScrollVertically()
并返回true。这类作品。。如果以非常小心的方式垂直拖动,
底页将响应。但是,一旦涉及任何水平移动,
底板
将停止响应垂直拖动事件

我不确定覆盖
canscrollvertical()
是否是正确的方法——从用户体验的角度来看,它肯定感觉不正确

我还注意到,如果我使用
ViewPager
而不是带有水平方向
LayoutManager
RecyclerView
,则
底页会根据需要响应垂直滑动事件

是否有其他的
布局管理器
回收视图
底部工作表行为
,或者其他方法可以帮助将垂直滚动事件传播到
底部工作表行为

这里有一个问题的例子:

(问题可通过提交#f59a7031重现)


只需展开第一张底片

问题出在哪里?在
框架布局中
<代码>底页
放入
协调布局
时,效果完美。然后,
BottomSheet
可以将它的滚动状态通过
CoordinatorLayout
传递给其他视图,这些视图作为
CoordinatorLayout
的直接子视图

为什么
RecyclerView
无法将滚动状态传递到
底页
?它不是
CoordinatorLayout
的直接子对象。但有一种方法可以传递它们:
RecyclerView
必须在实现和的视图中。答案是:

因此,您的
fragment\u sheetX.xml
布局应该如下所示:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.NestedScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#fff"
    android:orientation="vertical"
    android:fillViewport="true">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</android.support.v4.widget.NestedScrollView>


顺便说一句:
MultiSheetView
是一个很好的功能,也是一种非常有趣的移动用户体验设计方法。

我怀疑
FrameLayout
会阻止滚动事件传播到
协调布局
。我想我在某种程度上接近了这个解决方案,但在视口问题上遇到了麻烦。非常感谢。如果层次结构为:NestedScrollView->ConstraintLayout->RecylerView,则RecyclerView滚动行为不正确…我可以向下滚动,但不能向上滚动。当尝试向上滚动时,底部的页面(在本例中为NestedScrollView)会折叠…有什么想法吗?这种方法会导致
RecyclerView
的高度相当于
wrap_content
,这对性能非常糟糕,因为它会导致
ViewHolder
为所有子级单独充气,而不会重复使用太多,这个答案解决了我的问题。