在ViewHolder模式中将ViewHolder设置为静态对性能至关重要吗?

时间:2012-09-11 11:06:29

标签: android listview performance

ViewHolder pattern

中将ViewHolder设置为静态对性能至关重要
  

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

static class ViewHolder {
  TextView text;
  TextView timestamp;
  ImageView icon;
  ProgressBar progress;
  int position;
}

3 个答案:

答案 0 :(得分:8)

这对于性能来说并不重要,它与使用有关。如果ViewHolder类不是静态的 - 您必须提供父类的实例:

No enclosing instance of type Type is accessible. 
Must qualify the allocation with an enclosing instance of type Type 
(e.g. x.new A() where x is an instance of Type).

答案 1 :(得分:1)

编辑:误解了这个问题 - 似乎你在具体询问如何制作它static。这不应该对性能至关重要,但这个想法有点帮助。

最终编辑:Static nested class in Java, why?

====

以下原始答案:

从繁重的ListView(或其他类型的回收的 AdapterView)中挤出性能非常好。然而,最好的方法是以某种方式描述性能。

同样在 Google IO 2010 时,他们会推荐这种方法:

http://www.youtube.com/watch?v=wDBM6wVEO70

编辑:

此处还有指向 traceview 的链接以描述效果,但我不确定它的效果如何。

http://developer.android.com/tools/debugging/debugging-tracing.html

答案 2 :(得分:-3)

这不是必须的。但是,当您使用这样做时,您在适配器视图为空时再次使用视图。您正在创建视图并为视图部件指定值,并使用静态类ViewHolder标记整个视图。因此,当您返回并且视图不为空时,可见部分将来自获取标记。这就是如何创建更少的对象以及减少适配器上的工作量。