通常一个适配器会有这个来优化列表视图的性能:
@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;
}
但是如果我有不同类型的行,比如 1 带有 ImabeView,1 带有 CheckBox,1 带有 EditText
第一件事将是:
@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 个不同的 ViewHolders 并且取决于各自的 Holder 的类型........setTag?
我可以找到任何这样的例子。实际上我还没有看到使用超过 1 个 ViewHolder 的 ListView。
我做对了吗?
谢谢你