我的代码中有两种用于适配器实现的类型,但我不确定哪一种更好。
这是我的更新程序模式:
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。