Android 经常有很多时候会有不同类型的item的listview需求,下面类似于像聊天对话框的界面adapter。
public class AdviceAdapter extends BaseAdapter {
private final static String THIS_FILE = "AdviceAdapter";
private final static int TYPE_SERVICE = 1;
private final static int TYPE_USER = 0;
private final static int TYPE_COUNT = 2;
private Context mContext;
private List<adviceinfo.AdviceInfo> mList;
protected Fragment mFragment;
private adviceinfo.AdviceInfo info;
public AdviceAdapter(Activity mContext, List<adviceinfo.AdviceInfo> list) {
this.mContext = mContext;
this.mList = list;
}
@Override
public int getCount() {
return mList.size();
}
@Override
public Object getItem(int position) {
return mList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public void addList(List<adviceinfo.AdviceInfo> list){
mList.addAll(list);
notifyDataSetChanged();
}
public void clearList(){
mList.clear();
notifyDataSetChanged();
}
@Override
public int getViewTypeCount() {
return TYPE_COUNT;
}
@Override
public int getItemViewType(int position) {
//type一定要从0开始,否则会报数组越界异常
if ("1".equals(mList.get(position).getContSide())) {
return TYPE_USER;// 用户
}else{
return TYPE_SERVICE;// 客服
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder1 = null;
ViewHolder holder2 = null;
int currentType;
info = mList.get(position);
currentType = getItemViewType(position)+1;
if (convertView == null) {
if(currentType == 2) {
holder2 = new ViewHolder();
LayoutInflater mInflater = LayoutInflater.from(mContext);
convertView = mInflater.inflate(R.layout.item_advice_service, null);
holder2.content = (TextView) convertView.findViewById(R.id.ask_content_service);
holder2.time = (TextView) convertView.findViewById(R.id.tv_advice_item_time_service);
convertView.setTag(R.id.tag_second,holder2);
}else {
holder1 = new ViewHolder();
LayoutInflater mInflater1 = LayoutInflater.from(mContext);
convertView = mInflater1.inflate(R.layout.item_advice_user, null);
holder1.time = (TextView) convertView.findViewById(R.id.tv_advice_item_time_user);
holder1.content = (TextView) convertView.findViewById(R.id.ask_content_user);
convertView.setTag(R.id.tag_first,holder1);
}
}else{
if(currentType == 2) {
holder2 = (ViewHolder) convertView.getTag(R.id.tag_second);
}else {
holder1 = (ViewHolder) convertView.getTag(R.id.tag_first);
}
}
if(currentType == 2) {
if(info.getFeedBackCont() != null )
holder2.content.setText(info.getFeedBackCont());
else
holder2.content.setText("");
if(DateTimeUtils.getLockUnLockTime(info.getCreateDate()) !=null )
holder2.time.setText(DateTimeUtils.getLockUnLockTime(info.getCreateDate()));
else
holder2.time.setText("");
}else{
if(info.getFeedBackCont() != null )
holder1.content.setText(info.getFeedBackCont());
else
holder1.content.setText("");
if(DateTimeUtils.getLockUnLockTime(info.getCreateDate()) !=null )
holder1.time.setText(DateTimeUtils.getLockUnLockTime(info.getCreateDate()));
else
holder1.time.setText("");
}
return convertView;
}
private static class ViewHolder {
TextView content;
TextView time;
}
}