13

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

ViewHolder 对象将每个组件视图存储在 Layout 的 tag 字段中,因此您可以立即访问它们而无需重复查找它们。首先,您需要创建一个类来保存您的确切视图集。例如:

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

3 回答 3

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).
于 2012-09-11T11:14:44.300 回答
1

编辑:误解了这个问题——看来你是在专门询问关于制作它的问题static。这对性能来说不应该是至关重要的,但这个想法是有帮助的。

此处的最终编辑:Java 中的静态嵌套类,为什么?

====

原答案如下:

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

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

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

编辑:

这里还有一个指向traceview的链接来分析性能,尽管我不确定它的效果如何。

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

于 2012-09-11T11:10:14.850 回答
-3

这不是强制性的。但是,当您以前这样做时,当您的适配器视图为空时,您将再次使用视图。您正在创建视图并将值分配给视图部件,并使用静态类 ViewHolder 标记整个视图。所以当你回来查看不为空时,可见部分会从那里获取标签。这就是您将创建更少的对象以及更少的适配器工作负载的方式。

于 2012-09-11T11:18:40.350 回答