【问题标题】:Optimum way to populate data in RecyclerView item at runtime在运行时在 RecyclerView 项中填充数据的最佳方式
【发布时间】:2016-03-21 15:21:49
【问题描述】:

我有一个回收器视图,我在其中填充一个项目,并且在每个项目中,某些元素是固定的,但也有一些在运行时填充的细节,我的意思是对于某些项目,可以有 3 个详细视图,大约 10 个和对于一些 2。 由于项目中的视图是在运行时创建的,因此 recyclerview 滚动变得很慢并且会出现抖动。

目前我正在使用LinearLayout 容器,我在其中使用container#addView(view) 填充项目

请提出任何最佳方法来做同样的事情。

提前谢谢你。

【问题讨论】:

  • 仅在需要填充数据时在适配器中使用它,它会在运行时发生变化。

标签: android view adapter android-recyclerview


【解决方案1】:

最好的方法是设置项目视图类型。

首先,您创建多个布局 XML 文件。也许您有一个带有单个详细视图的视图、一个带有 2 个详细视图的视图、一个带有 3 个详细视图、一个带有 4 个等等。可能有太多变体无法为每个视图获取 XML 布局,但您能覆盖 80%-90%他们的?为您最常见的情况制定特定的布局将大大提高您的性能。

然后在您的适配器中,您覆盖 getItemViewType(int position) 以为您拥有的每种视图类型返回一个特定的 int 值。因此,假设您的具有 3 个详细视图的布局是 viewType == 3(方便)。当使用位置 10 调用它时,您会查看位置 10 处的数据。如果它需要 3 个详细视图,则返回 viewType 为 3。

现在,当您的onCreateViewHolder 方法被调用时,您将有一个viewType 参数来告诉您要膨胀哪个视图。您可以使用 switch 语句根据视图类型 ID 扩展特定的 XML 布局。

这有什么帮助?因为RecyclerView 跟踪您的视图类型,并且通过让每个布局由特定视图类型标识,所以RecyclerView 知道在您需要新视图时回收该视图类型的视图。因此,如果您需要一个包含 3 个详细视图的视图,RecyclerView 会将它们归档在 viewType == 3 下,并会为您提供一个 ViewHolder 以供您的数据使用。

试一试。您应该会看到性能的明显提升。

【讨论】:

  • 谢谢你,kris,一定会试试的。
猜你喜欢
  • 1970-01-01
  • 2018-04-24
  • 2019-03-29
  • 2018-07-30
  • 2011-11-29
  • 1970-01-01
  • 2017-01-01
  • 2020-01-08
  • 1970-01-01
相关资源
最近更新 更多