package com.arrownock.opensource.arrownockers.topic; import java.util.List; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.AnimationDrawable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; import com.arrownock.opensource.arrownockers.R; import com.arrownock.opensource.arrownockers.topic.MessageEntity.EntityType; public class MessageListAdapter extends BaseAdapter { public static interface IMsgViewType { int IMVT_COM_MSG = 0; int IMVT_TO_MSG = 1; } private List<MessageEntity> coll; private LayoutInflater mInflater; public MessageListAdapter(Context context, List<MessageEntity> 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) { MessageEntity 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) { MessageEntity 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_message_left, null); viewHolder.tvRealname = (TextView) convertView .findViewById(R.id.tv_message_realname); } else { convertView = mInflater.inflate(R.layout.cell_message_right, null); viewHolder.pbar = (ProgressBar) convertView .findViewById(R.id.pbar); } viewHolder.tvSendTime = (TextView) convertView .findViewById(R.id.tv_message_timestamp); viewHolder.tvContent = (TextView) convertView .findViewById(R.id.tv_message_content); viewHolder.ivContent = (ImageView) convertView .findViewById(R.id.iv_message_content); viewHolder.isComMsg = isComMsg; convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.tvSendTime.setText(entity.dateString); if (entity.isComMsg) { if (entity.realname == null) { viewHolder.tvRealname.setText(entity.username); } else { viewHolder.tvRealname.setText(entity.realname); } } else { if (!entity.unsent) { viewHolder.pbar.setVisibility(View.INVISIBLE); } else { viewHolder.pbar.setVisibility(View.VISIBLE); } } 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.speaker); viewHolder.tvContent.setText(null); break; default: break; } viewHolder.ivContent.setBackgroundResource(0); AnimationDrawable animationDrawable = (AnimationDrawable) viewHolder.ivContent .getBackground(); if (animationDrawable != null) { animationDrawable.stop(); } 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; public TextView tvRealname; public ProgressBar pbar; } }