【问题标题】: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 对象将每个组件视图存储在标签内 布局的字段,因此您可以立即访问它们而无需 需要反复查找。首先,您需要创建一个类 保留您的确切观点。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-07
        相关资源
        最近更新 更多