CoordinatorLayout 中的嵌套 RecyclerView

Nested RecyclerViews in CoordinatorLayout

我现在正在处理的应用程序中的 View 层次结构有问题。

其中一个屏幕如下所示:

<CoordinatorLayout>

    <AppBarLayout>
        <Toolbar/>
    </AppBarLayout>

    <RecyclerView>
        ... items, some of which are horizontal Recyclers...
    </RecyclerView>

</CoordinatorLayout>

整个想法是在向下滚动 RecyclerView 内容时很好地呈现 Toolbar 视差。

整个过程运行良好,但提到的视差行为存在问题(这是通过自定义 AppBarLayout.ScrollingViewBehavior 实现完成的)。

有两种情况,具体取决于用户滚动时关注的项目:

  1. 如果正常 child 聚焦,整个事情会按预期工作 - Toolbar 视差进出。
  2. 如果 Recycler-based child 获得焦点,内容 RecyclerView 将按预期滚动,但不会触发视差行为,使布局变得奇怪 mid-state.

知道为什么会发生这种情况以及如何获得正确的行为,也就是一直传递到 CoordinatorLayout 的事件吗?

对于您的每个 sub-recyclerView,您需要调用

setNestedScrollingEnabled(false)

在那个 RecyclerView 上(您可以从您用于主 recyclerview 的任何 viewholder 来创建子视图)。这是嵌套滚动中当前已知的错误。如果我猜的话,我会说这可能与嵌套滚动布局不应该将嵌套滚动通知器发送到 parents 这一事实有关,如果它们在没有滚动轴,如果这有意义的话。