从同学那发现一种只初始化一个ViewHolder的方法 前提时不同Item布局中子元素的id必须是一样的
public class AnswerAdapter extends BaseAdapter {
private Context context;
private List<Answer> list;
public AnswerAdapter(Context context, List<Answer> list, int photo_id) {
this.context = context;
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Answer getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
//一定要注意这个数量,默认值是1,该数量与getItemViewType返回值相对应,如果像我这样写就的写3,下面这种方法也是可以的
/**@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
Answer answer = list.get(position);
if (answer.getType()==1) {
return TYPE_LEFT;
}else {
return TYPE_RIGHT;
}
}
*/
@Override
public int getViewTypeCount() {
return 3;
}
@Override
public int getItemViewType(int position) {
return list.get(position).getType();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Answer answer = getItem(position);
final RightViewHolder rightviewHolder;
int resource = 0;
if (answer.getType() == 1) {
resource = R.layout.answer_left_item;
} else {
resource = R.layout.answer_right_item;
}
if (convertView == null) {
convertView = View.inflate(context, resource, null);
rightviewHolder = new RightViewHolder();
rightviewHolder.bodytv = (TextView) convertView.findViewById(R.id.answer_tv);
convertView.setTag(rightviewHolder);
} else {
rightviewHolder = (RightViewHolder) convertView.getTag();
}
rightviewHolder.bodytv.setText(answer.getBody());
return convertView;
}
class RightViewHolder {
TextView timetv;
ImageView img;
TextView bodytv;
}