Android Viewholder实现

时间:2014-10-20 12:04:12

标签: android view android-viewholder

我理解Viewholder pattern的想法和用法,但我仍有一个问题:
假设我们在viewholder中有一个TextView,并显示10个项目(“item0,item1 ....”) 如果我打电话给findViewById一次,据我所知,我有一个TextView的对象。 因此,在第一次调用getView时,我会对视图进行膨胀,找到引用并设置文本“item0” 在第二次调用时,我获得相同的TextView并将文本“item1”设置为相同的TextView 为什么第0项文字不会改变?
背景中是否有任何克隆?

2 个答案:

答案 0 :(得分:1)

Is there any cloning in the background?

Android预分配了许多视图,这些视图足以填满运行应用程序的设备屏幕(视图池),从内容角度来看相同但与参考视角不同

答案 1 :(得分:1)

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

  

您的代码可能会在滚动期间经常调用findViewById()   ListView,可以降低性能。即使是适配器   返回一个膨胀的视图进行回收,你仍然需要查找   元素并更新它们。一种绕过重复使用findViewById()的方法   是使用“视图持有者”设计模式。

     

ViewHolder对象将每个组件视图存储在标记内   布局的字段,因此您可以立即访问它们而不需要   需要反复查找它们。首先,您需要创建一个类   保持您的确切观点。

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