I would like to provide my own custom class for the convertView
アダプターに2 種類以上のビューがListView
必要な場合は、アダプターgetViewTypeCount()
とgetItemViewType
. 最初のメソッドは、表示するビューのタイプの数を返します。2 番目のメソッドは、現在のアイテムの位置に必要なビューのタイプを返します。何かのようなもの:
abstract class MyListAdapter implements ListAdapter {
/**
* Set this up in your constructor
* */
private Context context;
private static final int VIEW_TYPE_SUPERMAN = 1;
private static final int VIEW_TYPE_BATMAN = 2;
@Override
public int getViewTypeCount() {
// TODO Auto-generated method stub
return 2;
}
@Override
public int getItemViewType(int position) {
if(position % 2 == 0) { // your business logic
return VIEW_TYPE_BATMAN;
}
return VIEW_TYPE_SUPERMAN;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
int viewType = getItemViewType(position);
if(convertView == null) {
if(viewType == VIEW_TYPE_BATMAN) {
convertView = LayoutInflater.from(context).inflate(resource_id_for_batman, parent);
} else {
convertView = LayoutInflater.from(context).inflate(resource_id_for_superman, parent);
}
// setup a ViewHolder pattern implementation
} else {
// get your ViewHolder from convertView
}
// update your views from ViewHolder
return convertView;
}
}
さらに読む: so that I can update it when an image has downloaded
. このため、別個のビューとタイプを用意する必要はありません。画像がダウンロードされていない、画像のダウンロードに失敗した、ダウンロードが進行中、または画像がダウンロードされた場合にのみ、各項目について (その位置に基づいて) 知る必要があります。したがってViewHolder
、この情報を追加してパターンを実装します。したがって、単一のビュー タイプがあり、それぞれの場合に何をすべきかを決定します (ダウンロードをトリガーする、キャッシュ/SD カードから画像を取得する、またはデフォルトの画像を表示する)。これをよりよく考えるには、アダプターの実装に別の構造が必要になると思いますがViewHolder
、ViewHolder
オブジェクトはリサイクルされたビューに関連付けられるため、そうではありません。
上記のコード (オーバーロードされた を追加するため) は、注釈View getView(int position, MyViewClass convertView, ViewGroup parent)
がない限りコンパイルする必要があります。@Override
アノテーションがないと、呼び出されないオーバーロードされたメソッドができます。