Android 不同类型item的listview

来源:互联网 发布:playclub大神捏脸数据 编辑:程序博客网 时间:2024/06/05 03:54

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;    }}
0 0