以编程方式添加视图与使用 recyclerView 有啥区别?

Posted

技术标签:

【中文标题】以编程方式添加视图与使用 recyclerView 有啥区别?【英文标题】:What will be the difference between adding the view programmatically vs using recyclerView?以编程方式添加视图与使用 recyclerView 有什么区别? 【发布时间】:2022-01-10 08:59:15 【问题描述】:

有一个canvas,作为初学者,我已经了解了 android 中的viewGroup,以及如何使用xml 或以编程方式使用@ 在viewGroup 中添加view 或多个views 987654327@。我们可以添加任意数量的view,也可以使用layoutParams动态增加viewheight。虽然我们可以使用addViewsetLayoutParams 来增加canvas 的高度,因为我们添加更多pages,我们为什么要使用recyclerView

UI 的角度来看,无论我们说increasing heightadding view 还是list of items,这里的一切似乎都是平等的。即使当我们是increasing the height 时,每个添加之间也有一个分隔符。但是,分离器在这里不是主要问题。基本上,根据pagesitemsdata 的数量,我们是canvas 视图的increasing the height,因此我们可以包含并显示所有data。这些pages 的数量目前已设置为14,但可以无限制地增加,每个canvas board 可以包含不可预测的数据量——可能是数百个点、线条、形状、文本的组合,图像等等 - 这是公平的。我们不限制用户在个人canvas board 上仅绘制一定数量的东西。

【问题讨论】:

【参考方案1】:

虽然我们可以使用 addView 或 setLayoutParams 来增加 画布随着我们添加更多页面,我们为什么要使用 recyclerView?

因为 RecyclerView 对于大数据集更高效。

从 UI 的角度来看,无论我们说什么,这里的一切似乎都是平等的 增加高度或添加视图或项目列表。

不,不是。如果您将 1000 个项目添加到 ViewGroup,它将尝试绘制 1000 个项目,最好将您的应用拖到爬行状态,或者最坏情况下崩溃。

如果您将 1000 个项目添加到 RecyclerView,它将绘制但许多项目将适合屏幕。

这些页数目前已设置为 14,但可以无限增加

不真实。总有一个限度。它可能很大,但总是有限制的。在这种情况下,限制是在 RAM 上(设备可以在内存中保存多少数据,然后才会报废)。

【讨论】:

【参考方案2】:

RecyclerView 是一个强大的工具,可以有效地显示大量数据集,具有多种功能,例如缓存和显示带有动画的项目。 使用 RecyclerView RecyclerView 和 addView() 之间没有什么可比较的,因为它们的用法不同。 不过,我建议您阅读这篇文章,了解 RecyclerView 的工作原理。

How Does RecyclerView Works

【讨论】:

感谢@Ali Babadi 抽出时间提供帮助。我浏览了recyclerView Here 和onCreateViewHolder 部分的官方文档,我发现这一行:ViewGroup: The ViewGroup into which the new View will be added after it is bound to an adapter position. 我明白了,recyclerView 也只使用addView 如果recyclerView也在使用addView,区别和优化在哪里? RecyclerView 使用缓存策略从 RecycledViewPool 中检索缓存的视图。

以上是关于以编程方式添加视图与使用 recyclerView 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

RecyclerView 与以编程方式创建的视图:哪个更好?

Android:以编程方式在片段中添加多个 RecyclerView

Recyclerview 以编程方式设置背景颜色

以编程方式设置 app:layout_behavior

在recyclerview android中以编程方式更改布局管理器

以编程方式在标题单击时滚动到 recyclerview 的最后一个位置