2014-10-20 72 views
1

我理解Viewholder pattern的想法和用法,但我仍然有一个问题:
假设我们在视图中有一个TextView,并显示10个项目(“item0,item1 ....”)。
如果我调用findViewById一次,据我所知我有一个TextView的对象。 因此,首先调用getView我为视图充气,找到参考并设置文本“item0”。
在第二次调用时,我获得相同的TextView并将文本“item1”设置为相同的TextView。
为什么第0项文字不变?
背景中是否有任何克隆?Android Viewholder实现

回答

1
Is there any cloning in the background? 

的Android预分配的若干意见是足以填满其中正在运行的应用程序(的景色的游泳池)装置的屏幕,从内容透视相同但不同于参考透视

1

假设您在适配器类中实现了ViewHolder,并且在getView()方法中使用了持有者,唯一可以肯定的是TextView在您的情况下描述了父结构的一个槽(例如ListView) 。一旦你定义了一个xml中的插槽,这是从你的适配器充气,没有克隆或类似的东西。
根据Google Documentation持有人的想法描述为:

你的代码 的ListView的滚动,这会降低性能期间可能调用findViewById()频繁。即使适配器 返回回收的充气视图,您仍然需要查找 元素并进行更新。围绕重复使用findViewById() 的方法是使用“视图持有者”设计模式。

ViewHolder对象将布局中标记为 的每个组件视图存储,因此您可以立即访问它们而不需要重复查找它们。首先,你需要创建一个类到 保持你的确切的一套意见。

有没有克隆,只有视图的可重用性