bla*_*awk 5 java android listview android-adapter android-recyclerview
我很难理解视图持有者的工作,这是我的一些问题,可能会增加我对视图持有者的理解:
有人说oncreateViewHolder返回viewholder对象,在单个行中包含所有视图的viewholder对象是什么?如果有1000个项目的列表,将创建多少个视图对象?
我的理解:如果我们正在创建viewholder对象,则其中包含诸如findviewbyid之类的视图引用,因为findviewbyid是扩展操作,因此通过viewholder我们可以创建单个viewholder对象并通过设置图像或文本(在onBindView中发生)来重复使用。
但是onCreateViewHolder运行多次,结果findviewbyid也将执行多次,这不是性能问题吗?
它还与简单listview的基本适配器的convertView有何不同
谢谢!
视图持有者它可以帮助您通过 id 调用减少查找视图。让你举个例子。
假设您有 1k 个项目,每个项目都有 5 个您需要通过 id 查找的视图,并且只能在屏幕上显示 5 个完整项目。
因此,recyclerView 将创建 7 个(5 + 1 个未满底和 1 个未满顶)视图持有者。下次滚动 recyclerView 时,它将使用现有的viewHolders。正如名字所说:“回收者视图”
所以 findViewById 将被调用 7*5=35 次。如果您不使用 viewHolder,您将收到 5*1000 = 5000 次调用。
35 vs 5000,所以你明白我的想法。
假设您要显示包含 1000 个项目的列表,而屏幕中用户只能看到 10 个项目。您的适配器创建 10 个 ViewHolder 实例来同时显示它们。当用户滚动并且适配器必须显示更多项目时,它不会创建 ViewHolder 的新实例,而是重用不再可见的项目。您的适配器会阻止创建新视图并通过这样做节省 CPU 时间。
| 归档时间: |
|
| 查看次数: |
2242 次 |
| 最近记录: |