私のコードには Adapter 実装用に 2 つのタイプがありますが、どちらが優れているかわかりません。
ここに私のアップデータパターンがあります:
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 からのものです。