通常、アダプタには、リストビューのパフォーマンスを最適化するためにこれがあります。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
System.out.println("getView " + position + " " + convertView);
ViewHolder holder = null;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.item1, null);
holder = new ViewHolder();
holder.textView = (TextView)convertView.findViewById(R.id.text);
convertView.setTag(holder);
} else {
holder = (ViewHolder)convertView.getTag();
}
holder.textView.setText(mData.get(position));
return convertView;
}
ビューホルダーは次のとおりです。
public static class ViewHolder {
public TextView textView;
}
しかし、ImabeViewを使用した1つ、CheckBoxを使用した1つ、EditTextを使用した1つなど、さまざまなタイプの行がある場合はどうなりますか。
最初のものは次のようになります:
@Override
public int getViewTypeCount() {
return 3;
}
@Override
public int getItemViewType(int position) {
//if something
return 0
//if something else
return 1
//if something different
return 2
}
およびgetView();
getView(int position, View convertView, ViewGroup parent){
//if convetView == null, getItemViewType(position) and depending on the type inflate respective layout
convertView.setTag(holder);
//else
holder = (ViewHolder)convertView.getTag();
}
しかし、ViewHoldersについてはどうでしょうか。それぞれのホルダーのタイプに応じて、3つの異なるViewHolderを用意する必要がありますか?
私はこのようなものの例を見つけることができました。実際、私は複数のViewHolderを使用しているanuListViewを見たことがありません。
私はそれを正しい方法でやっていますか?
ありがとうございました