package com.arrownock.opensource.arrownockers.chat; import java.util.List; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.arrownock.opensource.arrownockers.R; import com.arrownock.opensource.arrownockers.chat.ChatMsgEntity.EntityType; public class ChatMsgViewAdapter extends BaseAdapter { public static interface IMsgViewType { int IMVT_COM_MSG = 0; int IMVT_TO_MSG = 1; } private List<ChatMsgEntity> coll; private LayoutInflater mInflater; public ChatMsgViewAdapter(Context context, List<ChatMsgEntity> coll) { this.coll = coll; mInflater = LayoutInflater.from(context); } public int getCount() { return coll.size(); } public Object getItem(int position) { return coll.get(position); } public long getItemId(int position) { return position; } public int getItemViewType(int position) { ChatMsgEntity entity = coll.get(position); if (entity.isComMsg) { return IMsgViewType.IMVT_COM_MSG; } else { return IMsgViewType.IMVT_TO_MSG; } } public int getViewTypeCount() { return 2; } public View getView(int position, View convertView, ViewGroup parent) { ChatMsgEntity entity = coll.get(position); boolean isComMsg = entity.isComMsg; EntityType entityType = entity.entityType; ViewHolder viewHolder = null; if (convertView == null) { viewHolder = new ViewHolder(); if (isComMsg) { convertView = mInflater.inflate(R.layout.cell_chat_left, null); } else { convertView = mInflater.inflate(R.layout.cell_chat_right, null); viewHolder.tvStatus = (TextView) convertView .findViewById(R.id.tv_chat_status); } viewHolder.tvSendTime = (TextView) convertView .findViewById(R.id.tv_chat_timestamp); viewHolder.tvRealname = (TextView) convertView .findViewById(R.id.tv_chat_realname); viewHolder.tvContent = (TextView) convertView .findViewById(R.id.tv_chat_content); viewHolder.ivContent = (ImageView) convertView .findViewById(R.id.iv_chat_content); viewHolder.isComMsg = isComMsg; convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.tvSendTime.setText(entity.date); String realname = null; if (!isComMsg) { String statuString = entity.status; if (statuString != null) { viewHolder.tvStatus .setTextColor(statuString.equals("read") ? Color.GREEN : Color.BLUE); } viewHolder.tvStatus.setText(entity.status); } else { realname = entity.realname; viewHolder.tvRealname.setText(realname); } switch (entityType) { case ET_TEXT: viewHolder.tvContent.setText(entity.text); viewHolder.ivContent.setImageBitmap(null); break; case ET_IMAGE: byte[] imageBytes = entity.imageBytes; Bitmap bm = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length); viewHolder.ivContent.setImageBitmap(bm); viewHolder.tvContent.setText(null); break; case ET_AUDIO: viewHolder.ivContent.setImageResource(R.drawable.audio_image); viewHolder.tvContent.setText(null); break; case ET_LOCATION: viewHolder.ivContent.setImageResource(R.drawable.map); viewHolder.tvContent.setText(null); break; default: break; } viewHolder.tvContent.setTag(entity); viewHolder.ivContent.setTag(entity); return convertView; } static class ViewHolder { public TextView tvSendTime; public TextView tvRealname; public TextView tvStatus; public ImageView ivUserHead; public TextView tvContent; public ImageView ivContent; public boolean isComMsg = true; } }