package com.arrownock.opensource.arrownockers.push; import java.util.List; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; 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.push.PushDetailsEntity.EntityType; public class PushDetailsListAdapter extends BaseAdapter { public static interface IMsgViewType { int IMVT_COM_MSG = 0; int IMVT_TO_MSG = 1; } private List<PushDetailsEntity> coll; private LayoutInflater mInflater; public PushDetailsListAdapter(Context context, List<PushDetailsEntity> 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) { PushDetailsEntity 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) { PushDetailsEntity entity = coll.get(position); boolean isComMsg = entity.isComMsg; EntityType entityType = entity.entityType; ViewHolder viewHolder = null; if (convertView == null) { if (isComMsg) { convertView = mInflater.inflate(R.layout.row_push_left, null); } else { convertView = mInflater.inflate(R.layout.row_push_right, null); } viewHolder = new ViewHolder(); viewHolder.tvSendTime = (TextView) convertView .findViewById(R.id.tv_sendtime); viewHolder.tvContent = (TextView) convertView .findViewById(R.id.tv_chatcontent); viewHolder.ivContent = (ImageView) convertView .findViewById(R.id.iv_chatcontent); viewHolder.isComMsg = isComMsg; convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.tvSendTime.setText(entity.dateString); 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 tvContent; public ImageView ivContent; public boolean isComMsg = true; } }