具有水平滚动的嵌套 RecyclerView 中的滚动行为
Posted
技术标签:
【中文标题】具有水平滚动的嵌套 RecyclerView 中的滚动行为【英文标题】:Scroll behavior in nested RecyclerView with horizontal scroll 【发布时间】:2015-12-08 02:58:29 【问题描述】:我必须在每个项目中创建垂直的RecyclerView
和嵌套的水平RecyclerView
。一切都在CoordinatorLayout
之内。当我通过点击嵌套的 RecyclerView 工具栏隐藏外部进行滚动时,但是当我通过点击嵌套的一个工具栏来滚动父 Recycler 时。
任何帮助将不胜感激。
这是我的 xml 布局:
main_activity.xml:
<android.support.design.widget.CoordinatorLayout
...>
<FrameLayout
android:id="@+id/fragment_frame"
...
android:fitsSystemWindows="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
<android.support.design.widget.AppBarLayout
...
android:fitsSystemWindows="true"
android:id="@+id/appbar_layout">
<include layout="@layout/toolbar"/>
</android.support.design.widget.AppBarLayout>
</android.support.design.widget.CoordinatorLayout>
这里是toolbar.xml:
<android.support.v7.widget.Toolbar
android:id="@+id/main_toolbar"
...
android:fitsSystemWindows="true"
app:layout_scrollFlags="scroll|enterAlways">
<TextView .../>
</android.support.v7.widget.Toolbar>
片段.xml:
<android.support.v7.widget.RecyclerView
...
android:scrollbars="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
还有recycler_view_item.xml:
<RelativeLayout ...>
<TextView .../>
<!-- fixme(CullyCross) fix bug with hiding toolbar -->
<android.support.v7.widget.RecyclerView
...
android:scrollbars="horizontal"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
/>
</RelativeLayout>
谢谢, 安东
【问题讨论】:
运气好吗?我也面临同样的问题! @RafiqueMohammed 不,对不起 @AntonShkurenko 你得到解决方案了吗..我面临同样的问题.. @RHL 不,我没有,我离开了那份工作 :) 试试下面的解决方案,这似乎是真的(我没有检查),如果它是真的,就给它投票 【参考方案1】:按照这里的要求,我找到了迄今为止足够好的解决方案:
在我的例子中,我有一个 nestedScrollView
,其中 4 个 RecyclerView
s 设置为在里面水平滚动。对于每个RecyclerView
s,我都以编程方式完成了此操作:
restaurantsRecylerView.setHasFixedSize(true);
restaurantsRecylerView.setNestedScrollingEnabled(false);
您可能不想要 fixedSize,不确定它是否会有所不同,我的列表总是 25,所以我可以使用它来提高性能。完成此操作后,即使触摸 recyclerViews,我也可以毫无问题地滚动
希望对你有帮助
【讨论】:
setNestedScrollingEnabled 对我有帮助。并不是说您也可以使用 android:nestedScrollingEnabled="false" 在 xml 中设置它:) 我只禁用了嵌套滚动,它也有效。谢谢。 XMLandroid:nestedScrollingEnabled="false"
用于使用 Groupie 的嵌套回收器工作。
@All 我必须在水平回收器视图中为每个项目创建垂直回收器视图。主要部分,如果用户滚动任何内部水平回收器视图,我需要滚动每个项目中的所有回收器视图。我已经尝试完成了 80 %,但是遇到了问题......我现在需要的是我们可以停止在 RecyclerView.SCROLL_STATE_SETTLING 状态下滚动【参考方案2】:
尝试在android.support.v4.widget.NestedScrollView 中使用RecyclerView
。
<android.support.v4.widget.NestedScrollView
android:id="@+id/nScrollView"
android:layout_
android:layout_>
<!-- Set other views of your Layout -->
</android.support.v4.widget.NestedScrollView>
还可以尝试在Toolbar
和
RecylerView.setNestedScrollingEnabled(false); // set it true or false as per requirement
【讨论】:
我遇到了完全相同的问题。我在 NestedScrollView 中有一个水平 recyclerViews 列表。如果您滚动点击其中一个 recyclerViews,则协调器布局无法正常工作。如果您点击其他任何地方都可以,工具栏不会隐藏或显示。尝试水平滚动时也有非常糟糕的体验。 @Lancelot 我当时没找到答案,如果你找到了,在这里写下答案,我会接受的 嗨@AntonShkurenko 这是我所做的,到目前为止我对解决方案感到满意。在我的情况下,我有一个带有 4 个 RecyclerViews 的 nestedScrollView 设置为在内部水平滚动。对于每个 RecyclerViews,我都以编程方式完成了此操作:restaurantRecylerView.setHasFixedSize(true); restaurantRecylerView.setNestedScrollingEnabled(false);您可能不想要fixedSize,不确定它是否会有所不同,我的列表总是25,所以我可以使用它来提高性能。完成此操作后,即使触摸 recyclerViews,我也可以毫无问题地滚动 @Lancelot 我一直在努力解决这个问题,而您的解决方案正是我想要的。我很难找到这个答案,如果你把它作为答案而不是评论,其他人可能会更容易找到,你会得到一些代表。至少来自我。谢谢。 嗨@DanielJulio 我刚刚发布了答案,我仍在努力让它变得更好,因为水平滚动有时有点困难。感谢您的评论。【参考方案3】:我们可以在 XML 中实现这一点
android:nestedScrollingEnabled="false"
【讨论】:
以上是关于具有水平滚动的嵌套 RecyclerView 中的滚动行为的主要内容,如果未能解决你的问题,请参考以下文章
Android 布局:具有滚动行为的 Viewpager 内的垂直 Recyclerview 内的水平 Recyclerview