一屏实现两个recyclerview

Impelement two recyclerview in one screen

我如何实现这种 UI,我们有两个 recyclerView。一个水平滚动,第二个垂直滚动。当第二个滚动时,第一个也一起滚动到顶部。

我尝试使用 NestedScrollView 来实现,但我不得不让第二个 recyclerView 高度包裹内容,这导致 recyclerView 无法回收。

我尝试的第二种方法是使用一个 recyclerView。并添加水平回收视图作为 header。问题是在导航时保存 header recyclerview 滚动状态。在 header recyclerView 中加载下一页(第 3 页)时发生崩溃。

问题是:这种ui有没有最优解?

在某些情况下,像这样,你不必使用 2 RecyclerView 并且你还必须避免在 ScrollView 中使用 RecyclerView 而不是这个,你必须使用 one vertical RecyclerViewmultitype 视图 Adapter。 这样,您将拥有 2 个不同的 ViewHolder,其中一个是水平的 recyclerView(您的顶级项目),另一个是您的其他项目。 要学习多类型适配器,您可以看到: How to create RecyclerView with multiple view types

对于垂直 RecyclerView 内的水平 recyclerView,您可以看到: https://medium.com/@ashishkudale/android-list-inside-list-using-recyclerview-73cff2c4ea95

你必须结合这两个。

我无法理解“header”的意思,您说“将水平回收视图添加为 header”,但如果您按照我说的做了,问题是内部水平的状态recyclerView,我认为你可能在垂直回收器视图的 OnBind() 方法中调用了水平 RecyclerView 的 setAdapter 方法,这是我在许多教程中看到的常见错误。 如果你犯了这个错误,请尝试在其 viewHolder 的构造函数中调用内部 recyclerView 的 setAdapter,并在 VerticalRecylerView 的 onBind() 方法中使用 yourHorizontalAdapter.notifyDataSetChanged() 更新列表, 如果不是这种情况并且您的 recyclerView 完全被破坏,请参阅此 link :How to save RecyclerView's scroll position using RecyclerView.State?