我正在尝试通过调用 findViewById()
来尽可能加快应用程序的速度在 Adapter 类中尽可能少。
我听说过一种可以创建 HashMap<T>
的“方法”包含 View
实例和整数作为值,并将其与适配器的 ViewHolder
一起使用或一起使用内部类。如您所见,我对此知之甚少,也没有机会就此“方式”提出更多问题。
我一直在 Internet 上搜索解决方案,但我不是在使用错误的关键字进行搜索,就是我没有识别出这样的解决方案。
任何人都可以以正确的方式指导我吗?也许有人写了一个关于如何实现这一点的小样本?
编辑 1
我目前的 ListView
没有任何问题因为它已经在使用 ViewHolder
图案。提出这个问题的原因是因为我听说使用 HashMap
实际上可以获得更快的速度。模式比使用 ViewHolder
图案。我知道这是模糊的描述,但这就是我来这里问的原因。
共享代码根本没有帮助,因为它只是一个使用 ViewHolder
的普通适配器模式,就像您共享的链接中的模式一样。没有任何实验或使适配器变慢的东西。
再说一遍,问这个的主要原因是要找到我们是否有比 ViewHolder
更快的模式
最佳答案
减少调用 findViewById 的数量的方法是使用 ViewHolder“回收” View 。背后的想法是保持膨胀的 View 并在需要时重用它们 - 因为它们已经有 ViewHolders 你不需要进行 findViewById 调用。
正如@nhaarman 在他的回答的最后一部分中所描述的,为 ListView 执行此操作的方法是在 getView 中重用 convertView(如果它不为空)并使用 ViewHolder 中的引用 View 来更新它们。
first link 中描述了一种如何通过 setTag 创建 ViewHolder 并将它们存储在 View 中的方法。 @nhaarman 提供。 然后在 getView 函数中,如果 convertView 不为空,则调用 getTag 以取回 ViewHolder。
在另一个注释中,您应该查看 RecyclerView这是一个强制执行 ViewHolder 模式的 ListView 。
关于android - 如何避免在 Adapter 类中多次调用 findViewById()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31686666/