android - ScrollView vs RecyclerView 适用于 Android 上的不同 child

标签 android android-recyclerview scrollview

我混合了 10-15 个自定义 View 和 fragment 以显示在垂直列表中。我不确定 RecyclerView 在所有 View 都不相似的场景中是否有任何优势。 RecyclerView 似乎添加了很多样板代码,我认为我可以获得的唯一优势是更容易进入/退出动画。

我的自定义 View /fragment 也会在创建时调用网络服务。出于商业原因,我们不会缓存网络请求。我的理解是 RecyclerView 会在每次绑定(bind)时触发这些 Web 服务调用,从而导致冗余调用和可见的延迟。相比之下,ScrollView 应该加载一次 View ,并将它们全部保存在内存中,避免多次调用。

我的理解正确吗?在给定的场景中,我需要一些帮助来理解 ScrollViews 的性能影响。

最佳答案

ScrollView

对于 ScrollView,它的所有 subview 都将同时创建,而不管屏幕上的可见性。如果将 ScrollView 用于您的解决方案,您可能希望“监听”其 subview 何时变得可见以更新其内容,最初使用占位符。您还可以构建一些可以在后台线程中获取内容的东西。这可能会很快变得比您想要的更复杂。

回收 View

RecyclerView 的优点是可以延迟 subview 的创建,直到它们自动可见,并且可以通过通用布局重用 subview 。

通过为您的每个 child 使用不同的“项目 View 类型”,您将禁用 RecyclerView 的“回收”部分,但仍然可以获得推迟 View 创建直到它们滚动到 View 中的好处。

RecyclerViews 确实提供了一个相当结构化的模式,供您通过 Adapter 和 ViewHolders 使用。虽然个人并不熟悉,但 RecyclerView 也有一个 RecyclerView.ViewCacheExtension,旨在让开发人员控制 View 的缓存。

总的来说,后期绑定(bind)的优势(不要创建和加载可能永远不会被查看的 View )和 RecyclerView 的灵 active 可能会为您带来不错的结果。

关于android - ScrollView vs RecyclerView 适用于 Android 上的不同 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38083484/

相关文章:

iOS ScrollView 不工作

java - 无法从适配器检索数据并将其显示为 fragment

android - 如何等待协程 Dispatch.IO 数据库查询完成以填充 RecyclerView

react-native - ReactNative ScrollView 不会滚动到底部

Android:不推荐使用 WifiInfo.getIpAddress()

移动设备上的 PHP 强制下载 header 失败

android 可扩展菜单(隐藏/取消隐藏菜单)

android - GPS:NTP时间注入(inject)的工作原理

android - RecyclerView 在到达数据末尾时崩溃

ios - 具有相同高度的 SwiftUI HStack 元素