【问题标题】:Android Viewholder implementationAndroid Viewholder 实现
【发布时间】:2014-10-20 12:04:12
【问题描述】:
我了解Viewholder pattern的概念和用法,但我还有一个问题:
假设我们在 viewholder 中有一个 TextView,要显示 10 个项目(“item0, item1....”)。
如果我打电话给findViewById 一次,据我所知,我有一个该TextView 的对象。
因此,在第一次调用 getView 时,我会放大视图,找到参考并设置文本“item0”。
在第二次通话时,我得到相同的 TextView 并将文本“item1”设置为相同的 TextView。
为什么第 0 项文本不会改变?
后台有克隆吗?
【问题讨论】:
标签:
android
view
android-viewholder
【解决方案1】:
Is there any cloning in the background?
Android 预先分配了一些视图,足以填满运行应用的设备屏幕(视图池),从内容角度来看是相同的,但从参考角度来看是不同的
【解决方案2】:
假设您在适配器类中实现 ViewHolder 并在 getView() 方法中使用持有者,唯一可以肯定的是,在您的情况下,TextView 描述了父结构的插槽(例如列表显示)。一旦您在 xml 中定义了从您的适配器膨胀的插槽,就没有克隆或类似的东西。
根据Google Documentation,持有人的想法被描述为:
您的代码可能会在滚动过程中频繁调用 findViewById()
ListView,这会降低性能。即使当适配器
返回一个膨胀的视图进行回收,你仍然需要查找
元素并更新它们。重复使用 findViewById() 的一种方法
就是使用“view holder”设计模式。
ViewHolder 对象将每个组件视图存储在标签内
布局的字段,因此您可以立即访问它们而无需
需要反复查找。首先,您需要创建一个类
保留您的确切观点。
没有克隆,只有视图的可重用性