【问题标题】:Multiple LayoutManager in ConcatAdapterConcatAdapter 中的多个 LayoutManager
【发布时间】:2021-04-04 15:07:42
【问题描述】:

我想实现一个像这张图片一样的 ConcatAdapter:

此页面的 recyclerView 包含以下元素:

  • 标题
  • 水平 recyclerView(带分页)
  • 标题
  • 垂直recyclerView(无分页)
  • 标题
  • 水平 recyclerView(带分页)

但问题是我只能将一个 LayoutManager 设置为我所知道的包含 ConcatAdapter 的 recyclerView。

如何为每个适配器设置不同的布局管理器? 或者任何其他使用 CocantAdapter 实现此页面的解决方案?

(为什么选择 ConcatAdapter?因为它解决了 nestedRecyclerView 的性能问题,即使我知道使用 recyclerViewPool)

【问题讨论】:

  • Concat 适配器非常原始,它只是将项目位置重新映射到包含的适配器。您不能在这种情况下使用它。

标签: android android-recyclerview nestedrecyclerview android-concatadapter android-mergeadapter


【解决方案1】:

很遗憾,这是不可能的。 RecyclerView 适配器只是为每一行提供和绑定视图的组件。 ConcatAdapter 没有什么不同,它只是从各个适配器重定向。

如果它确实对布局管理器有任何控制权,那它真的会破坏RecyclerView 模块化的全部意义,这也是它最初如此强大的原因。

您可以查看源代码here 以了解更多关于它是如何实现的。

【讨论】:

  • 谢谢,@henry。那么解决方案是什么?我怎样才能实现它的流畅和高性能?
  • 好吧,我从来没有遇到过嵌套水平 RecyclerView 的性能问题。恐怕没有一种解决方案可以让您的水平布局共享一个视图池!
【解决方案2】:

简单的解决方案是在 Activity/Fragment 中创建一个 Viewpool。 recyclerview 的适配器有 2 种不同类型的项目, 常规的一个和另一个实际上有一个回收器视图,其中水平布局作为适配器。

所以是一个 Viewholder,它在内部拥有一个带有自己的 viewholders 的 recyclerview。

然后您只需从活动中获取创建的视图池,将其作为共享池分配给具有水平滚动的所有适配器,就是这样:-)

Concat 适配器恐怕对此没有帮助,所以这将是我的替代解决方案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多