我的代码中有两种类型的适配器实现,我不确定哪一种更好。
这是我的更新程序模式:
public View getView(int position, View convertView, ViewGroup parent) {
Updater content;
if(convertView == null) {
final TextView msg = new TextView(parent.getContext());
content = new Updater() {
public void update(...) {
// code to update the control msg
}
};
convertView = msg;
convertView.setTag(content);
} else {
content = (Updater)convertView.getTag();
}
content.update(...);
return convertView;
}
// ...
private interface Updater {
void update(...);
}
这是我的 ViewHolder 模式:
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if(convertView == null) {
convertView = inflater.inflate(...);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder)convertView.getTag();
}
holder.setData(...);
return convertView;
}
// ...
private class ViewHolder {
public final TextView text;
public ViewHolder(final View owner) {
text = (TextView)owner.findViewById(R.id.text);
}
public void setData(...) {
// ...
}
}
我想知道哪一个更有效?我还可以在更复杂的控件中实现Updater
接口,因此更新更简单不同的控制以一种常见的方式。所以我可以在不使用convertView
的情况下将getTag()
转换为我的界面。但是在上面的代码中我使用了一个final
变量,它是在我的接口实现之外定义的。 有人可以告诉我这是否会导致性能问题?我不知道带有最终变量的java内部会发生什么。
如果我的更新程序模式不好,请告诉我,为什么我应该使用 ViewHolder 模式,除非此模式来自Google IO。
答案 0 :(得分:0)
这样的决定对性能几乎没有影响。两种解决方案同样有效。最终的键盘实际上可以通过允许编译器进行某些优化来提高性能,但它们肯定是无法控制的。