package com.suan.weclient.adapter; import android.app.Activity; import android.app.Dialog; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.Color; import android.os.Message; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import com.suan.weclient.R; import com.suan.weclient.activity.ChatActivity; import com.suan.weclient.activity.FansProfileActivity; import com.suan.weclient.activity.ShowImgActivity; import com.suan.weclient.util.ListCacheManager; import com.suan.weclient.util.Util; import com.suan.weclient.util.data.DataManager; import com.suan.weclient.util.data.bean.MessageBean; import com.suan.weclient.util.net.WeChatLoader; import com.suan.weclient.util.net.WechatManager; import com.suan.weclient.util.net.WechatManager.OnActionFinishListener; import com.suan.weclient.util.net.images.ImageCacheManager; import com.suan.weclient.util.text.SpanUtil; import com.suan.weclient.util.voice.VoiceHolder; import com.suan.weclient.util.voice.VoiceManager.AudioPlayListener; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; public class SearchListAdapter extends BaseAdapter implements OnScrollListener { private LayoutInflater mInflater; private ListCacheManager mListCacheManager; private DataManager mDataManager; private Activity mActivity; private Dialog dialog; private static final int MAX_TEXT_LENGTH = 140; private String canceledReplyContent = ""; /* * whether the scroll is busy */ private boolean mBusy = false; /* * whether the user cancel the last reply if so ,we will save it */ private boolean lastReplyCanceled = false; public SearchListAdapter(Activity activity, DataManager dataManager) { this.mInflater = LayoutInflater.from(activity); this.mDataManager = dataManager; this.mActivity = activity; this.mListCacheManager = new ListCacheManager(); //when user index change mDataManager.addUserIndexChangeListener(new DataManager.UserIndexChangeListener() { @Override public void onChange(int oldIndex, int nowIndex) { notifyDataSetChanged(); } }); } private ArrayList<MessageBean> getMessageItems() { if (mDataManager.getUserGroup().size() == 0) { ArrayList<MessageBean> blankArrayList = new ArrayList<MessageBean>(); return blankArrayList; } return mDataManager.getSearchMessageHolder().getMessageList(); } @Override public int getCount() { // TODO Auto-generated method stub return getMessageItems().size(); } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub return arg0; } public void updateCache() { mListCacheManager.clearData(); } public View newView(final int position) { View convertView = null; switch (getMessageItems().get(position).getType()) { case MessageBean.MESSAGE_TYPE_TEXT: convertView = mInflater.inflate(R.layout.message_item_text_layout, null); break; case MessageBean.MESSAGE_TYPE_IMG: convertView = mInflater.inflate(R.layout.message_item_img_layout, null); break; case MessageBean.MESSAGE_TYPE_VOICE: convertView = mInflater.inflate(R.layout.message_item_voice_layout, null); break; case MessageBean.MESSAGE_TYPE_EMPTY: convertView = mInflater.inflate(R.layout.message_item_empty_layout, null); break; case MessageBean.MESSAGE_TYPE_DATA: convertView = mInflater.inflate(R.layout.message_item_data_layout, null); break; default: convertView = mInflater.inflate(R.layout.message_item_text_layout, null); break; } return convertView; } private ItemViewHolder getHolder(final View view, int position) { ItemViewHolder holder = (ItemViewHolder) view.getTag(); if (holder == null) { holder = new ItemViewHolder(view, position); view.setTag(holder); } return holder; } public class ItemViewHolder { private View parentView; private LinearLayout headerLayout; private ImageView profileImageView; private TextView profileTextView; private TextView timeTextView; private TextView hasReplyTextView; private LinearLayout contentLayout; private ImageView contentImageView; private TextView contentTextView; private RelativeLayout voicePlayLayout; private TextView voiceInfoTextView; private ImageView voicePlayView; private LinearLayout longClickLayout; private RelativeLayout copyLayout, shareLayout, downloadLayout; private ImageView copyButton, shareButton, downloadButton; private RelativeLayout replyLayout, starLayout; private ImageView replyButton, starImageButton; /* about data layout */ private TextView totalPeopleTextView, newMsgTextView, newPeopleTextView; private LinearLayout userLayout; /* about data */ private MessageBean contentBean; private boolean dataLoaded = false; private Object data; private boolean headImgLoaded = false; private Bitmap headImgBitmap; public boolean getDataLoaded() { return dataLoaded; } public void setDataLoaded(boolean dataLoaded) { this.dataLoaded = dataLoaded; } public boolean getHeadImgLoaded() { return headImgLoaded; } public void setHeadImgLoaded(boolean headImgLoaded) { this.headImgLoaded = headImgLoaded; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } public Bitmap getHeadImgBitmap() { return headImgBitmap; } public void setHeadImgBitmap(Bitmap bitmap) { this.headImgBitmap = bitmap; } public MessageBean getMessageBean() { return contentBean; } public ItemViewHolder(View parentView, final int position) { this.parentView = parentView; this.contentBean = getMessageItems().get(position); switch (contentBean.getType()) { case MessageBean.MESSAGE_TYPE_TEXT: dataLoaded = true; headerLayout = (LinearLayout) parentView.findViewById(R.id.message_item_layout_header); contentLayout = (LinearLayout) parentView.findViewById(R.id.message_item_layout_content); profileImageView = (ImageView) parentView .findViewById(R.id.message_item_text_img_profile); profileTextView = (TextView) parentView .findViewById(R.id.message_item_text_text_profile); timeTextView = (TextView) parentView .findViewById(R.id.message_item_text_text_time); hasReplyTextView = (TextView) parentView.findViewById(R.id.message_item_text_text_has_reply); contentTextView = (TextView) parentView .findViewById(R.id.message_item_text_text_content); longClickLayout = (LinearLayout) parentView.findViewById(R.id.message_item_text_layout_long_click); copyLayout = (RelativeLayout) parentView.findViewById(R.id.message_item_text_layout_copy); shareLayout = (RelativeLayout) parentView.findViewById(R.id.message_item_text_layout_share); copyButton = (ImageView) parentView.findViewById(R.id.message_item_text_button_copy); shareButton = (ImageView) parentView.findViewById(R.id.message_item_text_button_share); starLayout = (RelativeLayout) parentView.findViewById(R.id.message_item_text_layout_star); replyLayout = (RelativeLayout) parentView.findViewById(R.id.message_item_text_layout_reply); starImageButton = (ImageView) parentView .findViewById(R.id.message_item_text_button_star); replyButton = (ImageView) parentView.findViewById(R.id.message_item_text_button_reply); String content = getMessageItems().get(position) .getContent(); SpanUtil.setHtmlSpanAndImgSpan(contentTextView, content, mActivity); break; case MessageBean.MESSAGE_TYPE_IMG: headerLayout = (LinearLayout) parentView.findViewById(R.id.message_item_layout_header); contentLayout = (LinearLayout) parentView.findViewById(R.id.message_item_layout_content); profileImageView = (ImageView) parentView .findViewById(R.id.message_item_img_img_profile); profileTextView = (TextView) parentView .findViewById(R.id.message_item_img_text_profile); timeTextView = (TextView) parentView .findViewById(R.id.message_item_img_text_time); hasReplyTextView = (TextView) parentView.findViewById(R.id.message_item_img_text_has_reply); contentImageView = (ImageView) parentView .findViewById(R.id.message_item_img_img_content); longClickLayout = (LinearLayout) parentView.findViewById(R.id.message_item_img_layout_long_click); downloadLayout = (RelativeLayout) parentView.findViewById(R.id.message_item_img_layout_download); shareLayout = (RelativeLayout) parentView.findViewById(R.id.message_item_img_layout_share); downloadButton = (ImageView) parentView.findViewById(R.id.message_item_img_button_download); shareButton = (ImageView) parentView.findViewById(R.id.message_item_img_button_share); starLayout = (RelativeLayout) parentView.findViewById(R.id.message_item_img_layout_star); replyLayout = (RelativeLayout) parentView.findViewById(R.id.message_item_img_layout_reply); starImageButton = (ImageView) parentView .findViewById(R.id.message_item_img_button_star); replyButton = (ImageView) parentView.findViewById(R.id.message_item_img_button_reply); break; case MessageBean.MESSAGE_TYPE_VOICE: headerLayout = (LinearLayout) parentView.findViewById(R.id.message_item_layout_header); contentLayout = (LinearLayout) parentView.findViewById(R.id.message_item_layout_content); profileImageView = (ImageView) parentView .findViewById(R.id.message_item_voi_img_profile); profileTextView = (TextView) parentView .findViewById(R.id.message_item_voi_text_profile); timeTextView = (TextView) parentView .findViewById(R.id.message_item_voi_text_time); hasReplyTextView = (TextView) parentView.findViewById(R.id.message_item_voi_text_has_reply); voiceInfoTextView = (TextView) parentView.findViewById(R.id.message_item_voi_text_info); voicePlayLayout = (RelativeLayout) parentView.findViewById(R.id.message_item_voi_layout_play); voicePlayView = (ImageView) parentView.findViewById(R.id.message_item_voi_button_play); longClickLayout = (LinearLayout) parentView.findViewById(R.id.message_item_voi_layout_long_click); downloadLayout = (RelativeLayout) parentView.findViewById(R.id.message_item_voi_layout_download); shareLayout = (RelativeLayout) parentView.findViewById(R.id.message_item_voi_layout_share); downloadButton = (ImageView) parentView.findViewById(R.id.message_item_voi_button_download); shareButton = (ImageView) parentView.findViewById(R.id.message_item_voi_button_share); starLayout = (RelativeLayout) parentView.findViewById(R.id.message_item_voi_layout_star); replyLayout = (RelativeLayout) parentView.findViewById(R.id.message_item_voi_layout_reply); starImageButton = (ImageView) parentView .findViewById(R.id.message_item_voi_button_star); replyButton = (ImageView) parentView.findViewById(R.id.message_item_voi_button_reply); break; case MessageBean.MESSAGE_TYPE_EMPTY: break; case MessageBean.MESSAGE_TYPE_DATA: newPeopleTextView = (TextView) parentView.findViewById(R.id.message_item_data_text_new_user); newMsgTextView = (TextView) parentView.findViewById(R.id.message_item_data_text_new_message); totalPeopleTextView = (TextView) parentView.findViewById(R.id.message_item_data_text_total_user); userLayout = (LinearLayout) parentView.findViewById(R.id.message_item_data_layout_user); break; default: headerLayout = (LinearLayout) parentView.findViewById(R.id.message_item_layout_header); contentLayout = (LinearLayout) parentView.findViewById(R.id.message_item_layout_content); profileImageView = (ImageView) parentView .findViewById(R.id.message_item_text_img_profile); profileTextView = (TextView) parentView .findViewById(R.id.message_item_text_text_profile); timeTextView = (TextView) parentView .findViewById(R.id.message_item_text_text_time); hasReplyTextView = (TextView) parentView.findViewById(R.id.message_item_text_text_has_reply); contentTextView = (TextView) parentView .findViewById(R.id.message_item_text_text_content); longClickLayout = (LinearLayout) parentView.findViewById(R.id.message_item_text_layout_long_click); copyLayout = (RelativeLayout) parentView.findViewById(R.id.message_item_text_layout_copy); shareLayout = (RelativeLayout) parentView.findViewById(R.id.message_item_text_layout_share); copyButton = (ImageView) parentView.findViewById(R.id.message_item_text_button_copy); shareButton = (ImageView) parentView.findViewById(R.id.message_item_text_button_share); starLayout = (RelativeLayout) parentView.findViewById(R.id.message_item_text_layout_star); replyLayout = (RelativeLayout) parentView.findViewById(R.id.message_item_text_layout_reply); starImageButton = (ImageView) parentView .findViewById(R.id.message_item_text_button_star); replyButton = (ImageView) parentView.findViewById(R.id.message_item_text_button_reply); contentTextView.setText("[目前暂不支持该类型消息]"); break; } } } public class LongClickListener implements View.OnLongClickListener { private ItemViewHolder holder; public LongClickListener(ItemViewHolder holder) { this.holder = holder; } @Override public boolean onLongClick(View v) { if (holder.longClickLayout.getVisibility() != View.VISIBLE) { holder.longClickLayout.setVisibility(View.VISIBLE); } else { holder.longClickLayout.setVisibility(View.GONE); } return false; } } public void bindView(View view, final int position) { ItemViewHolder holder = getHolder(view, position); switch (getMessageItems().get(position).getType()) { case MessageBean.MESSAGE_TYPE_TEXT: holder.contentTextView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mDataManager.createChat(mDataManager.getCurrentUser(), getMessageItems().get(position).getFakeId(), getMessageItems().get(position).getNickName()); Intent jumbIntent = new Intent(); jumbIntent.setClass(mActivity, ChatActivity.class); mActivity.startActivity(jumbIntent); mActivity.overridePendingTransition(R.anim.activity_movein_from_right_anim, R.anim.activity_moveout_to_left_anim); } }); break; case MessageBean.MESSAGE_TYPE_IMG: setImgMessageContent(holder); break; case MessageBean.MESSAGE_TYPE_VOICE: setVoiceMessageContent(holder); break; case MessageBean.MESSAGE_TYPE_EMPTY: break; case MessageBean.MESSAGE_TYPE_DATA: break; default: break; } MessageBean currentBean = getMessageItems().get(position); if (currentBean.getType() != MessageBean.MESSAGE_TYPE_EMPTY && currentBean.getType() != MessageBean.MESSAGE_TYPE_DATA) { holder.headerLayout.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub mDataManager.setFansProfileFakeId(getMessageItems().get(position).getFakeId()); Intent jumbIntent = new Intent(); jumbIntent.setClass(mActivity, FansProfileActivity.class); mActivity.startActivity(jumbIntent); mActivity.overridePendingTransition(R.anim.activity_movein_from_right_anim, R.anim.activity_moveout_to_left_anim); } }); holder.contentLayout.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mDataManager.createChat(mDataManager.getCurrentUser(), getMessageItems().get(position).getFakeId(), getMessageItems().get(position).getNickName()); Intent jumbIntent = new Intent(); jumbIntent.setClass(mActivity, ChatActivity.class); mActivity.startActivity(jumbIntent); mActivity.overridePendingTransition(R.anim.activity_movein_from_right_anim, R.anim.activity_moveout_to_left_anim); } }); holder.replyLayout.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (mDataManager.getUserGroup().size() == 0) { } else { popReply(getMessageItems().get(position)); } } }); holder.starLayout.setOnClickListener(new OnClickListener() { @Override public void onClick(final View v) { // TODO Auto-generated method stub boolean stared = mDataManager.getCurrentMessageHolder() .getMessageList().get(position).getStarred(); mDataManager.getWechatManager().star( mDataManager.getCurrentPosition(), position, !stared, new OnActionFinishListener() { @Override public void onFinish(int code, Object object) { // TODO Auto-generated method stub setStarBackground(v, getMessageItems().get(position)); } }); } }); setStarBackground(holder.starImageButton, holder.getMessageBean()); long time = Long.parseLong(currentBean .getDateTime()); Date date = new Date(time * 1000); SimpleDateFormat format = new SimpleDateFormat("MM.dd HH:mm "); String timeString = "" + format.format(date); holder.timeTextView.setText(timeString); holder.hasReplyTextView.setVisibility((Integer.parseInt(currentBean.getHasReply()) == 1) ? View.VISIBLE : View.GONE); holder.profileTextView.setText("" + currentBean.getNickName()); setHeadImg(holder); } } private void setVoiceMessageContent(final ItemViewHolder holder) { if (!mBusy && !holder.getDataLoaded()) { mDataManager.getWechatManager().getMessageVoice( mDataManager.getCurrentPosition(), holder.getMessageBean(), Integer.parseInt(holder.getMessageBean() .getLength()), mDataManager.getCurrentUser(), new OnActionFinishListener() { @Override public void onFinish(int code, Object object) { // TODO Auto-generated method stub if (code == WechatManager.ACTION_SUCCESS) { if (object != null) { byte[] bytes = (byte[]) object; VoiceHolder voiceHolder = new VoiceHolder( bytes, holder.getMessageBean() .getPlayLength(), holder.getMessageBean() .getLength()); int playLength = Integer.parseInt(holder.getMessageBean().getPlayLength()); int seconds = playLength / 1000; int minutes = seconds / 60; int leaveSecond = seconds % 60; String info = ""; if (minutes != 0) { info += minutes + "'"; } info += " " + leaveSecond + "'"; holder.voiceInfoTextView.setText(info); holder.setData(voiceHolder); holder.setDataLoaded(true); } } } }); } holder.voicePlayLayout.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (holder.getDataLoaded()) { final VoiceHolder voiceHolder = (VoiceHolder) holder.getData(); if (voiceHolder.getPlaying()) { mDataManager.getVoiceManager().stopMusic(); } else { mDataManager.getVoiceManager().playVoice( voiceHolder.getBytes(), voiceHolder.getPlayLength(), voiceHolder.getLength(), new AudioPlayListener() { @Override public void onAudioStop() { // TODO Auto-generated method stub voiceHolder.setPlaying(false); holder.voicePlayView.setSelected(false); } @Override public void onAudioStart() { // TODO Auto-generated method stub voiceHolder.setPlaying(true); holder.voicePlayView.setSelected(true); } @Override public void onAudioError() { // TODO Auto-generated method stub } }); } } else { } } }); } private void setImgMessageContent(final ItemViewHolder holder) { holder.contentImageView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent jumbIntent = new Intent(); jumbIntent.setClass(mActivity, ShowImgActivity.class); mDataManager.createImgHolder(holder.getMessageBean(), mDataManager.getCurrentUser()); mActivity.startActivity(jumbIntent); mActivity.overridePendingTransition(R.anim.search_activity_fly_in, R.anim.search_activity_fly_out); } }); if (!mBusy && !holder.getDataLoaded()) { Bitmap contentBitmap = mDataManager.getCacheManager().getBitmap( ImageCacheManager.CACHE_MESSAGE_CONTENT + holder.getMessageBean().getId()); if (contentBitmap == null) { mDataManager.getWechatManager().getMessageImg( mDataManager.getCurrentPosition(), holder.getMessageBean(), holder.contentImageView, WeChatLoader.WECHAT_URL_MESSAGE_IMG_SMALL, new OnActionFinishListener() { @Override public void onFinish(int code, Object object) { // TODO Auto-generated method stub if (code == WechatManager.ACTION_SUCCESS) { if (object != null) { Bitmap bitmap = (Bitmap) object; mDataManager.getCacheManager().putBitmap( ImageCacheManager.CACHE_MESSAGE_CONTENT + holder.getMessageBean(), bitmap, true); holder.setData(bitmap); holder.setDataLoaded(true); } } } }); } else { holder.contentImageView.setImageBitmap(contentBitmap); holder.setData(contentBitmap); holder.setDataLoaded(true); } } } private void setHeadImg(final ItemViewHolder holder) { Bitmap headBitmap = mDataManager.getCacheManager().getBitmap( ImageCacheManager.CACHE_MESSAGE_LIST_PROFILE + holder.getMessageBean().getFakeId()); if (headBitmap != null) { holder.profileImageView.setImageBitmap(headBitmap); holder.setHeadImgBitmap(headBitmap); holder.setHeadImgLoaded(true); } else { if (!mBusy && !holder.getHeadImgLoaded()) { mDataManager.getWechatManager().getMessageHeadImg( mDataManager.getCurrentPosition(), holder.getMessageBean().getFakeId(), holder.getMessageBean().getReferer(), holder.profileImageView, new OnActionFinishListener() { @Override public void onFinish(int code, Object object) { // TODO Auto-generated method stub if (code == WechatManager.ACTION_SUCCESS) { if (object != null) { Bitmap roundBitmap = Util.roundCornerWithBorder((Bitmap) object, holder.profileImageView.getWidth(), 10, Color.parseColor("#c6c6c6")); holder.profileImageView.setImageBitmap(roundBitmap); holder.setHeadImgBitmap(roundBitmap); holder.setHeadImgLoaded(true); mDataManager.getCacheManager().putBitmap( ImageCacheManager.CACHE_MESSAGE_LIST_PROFILE + holder.getMessageBean().getFakeId(), roundBitmap, true); } } } }); } } } private String getMessageId(int position) { return getMessageItems().get(position).getId(); } @Override public View getView(final int position, View convertView, ViewGroup parent) { View v; if (!mListCacheManager.containView(getMessageId(position))) { v = newView(position); mListCacheManager.putView(v, getMessageId(position)); } else { v = mListCacheManager.getView(getMessageId(position)); } bindView(v, position); return v; } public void popReply(final MessageBean messageBean) { dialog = Util.createReplyDialog(mActivity, messageBean.getNickName(), lastReplyCanceled, canceledReplyContent, new OnClickListener() { @Override public void onClick(View v) { lastReplyCanceled = false; String replyContent = ((EditText) dialog.findViewById(R.id.dialog_edit_edit_text)).getText().toString(); reply(messageBean, replyContent); dialog.cancel(); } }, new OnClickListener() { @Override public void onClick(View v) { String replyContent = ((EditText) dialog.findViewById(R.id.dialog_edit_edit_text)).getText().toString(); lastReplyCanceled = true; canceledReplyContent = replyContent; dialog.cancel(); } } ); dialog.show(); } private void setStarBackground(View view, MessageBean messageBean) { boolean star = messageBean.getStarred(); View starView = null; switch (messageBean.getType()) { case MessageBean.MESSAGE_TYPE_TEXT: starView = view.findViewById(R.id.message_item_text_button_star); break; case MessageBean.MESSAGE_TYPE_IMG: starView = view.findViewById(R.id.message_item_img_button_star); break; case MessageBean.MESSAGE_TYPE_VOICE: starView = view.findViewById(R.id.message_item_voi_button_star); break; default: starView = view.findViewById(R.id.message_item_text_button_star); break; } if (star) { starView.setBackgroundResource(R.drawable.msg_starred_button_bg); } else { starView.setBackgroundResource(R.drawable.msg_star_button_bg); } } private void reply(final MessageBean messageBean, String replyContent) { if (replyContent.length() > MAX_TEXT_LENGTH) { Toast.makeText(mActivity, "字数超过限制", Toast.LENGTH_LONG).show(); return; } else if (replyContent.length() == 0) { Toast.makeText(mActivity, "请输入内容", Toast.LENGTH_LONG).show(); return; } dialog.dismiss(); mDataManager.getWechatManager().reply( mDataManager.getCurrentPosition(), messageBean, replyContent, new OnActionFinishListener() { @Override public void onFinish(int code, Object object) { // TODO Auto-generated method stub messageBean.setHasReply("1"); } }); } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // TODO Auto-generated method stub } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { // TODO Auto-generated method stub if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) { // 滑动停止 mBusy = false; loadData(view); } else if (scrollState == OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {// 滑动手未松开 mBusy = true; } else if (scrollState == OnScrollListener.SCROLL_STATE_FLING) {// 滑动中手已松开 mBusy = true; } } private void loadData(AbsListView fatherView) { for (int i = 0; i < fatherView.getChildCount(); i++) { View nowView = fatherView.getChildAt(i); if (nowView.getTag() != null) { ItemViewHolder holder = (ItemViewHolder) nowView.getTag(); if (!holder.getHeadImgLoaded()) { setHeadImg(holder); } if (!holder.getDataLoaded()) { MessageBean contentBean = holder.getMessageBean(); switch (contentBean.getType()) { case MessageBean.MESSAGE_TYPE_IMG: setImgMessageContent(holder); break; case MessageBean.MESSAGE_TYPE_VOICE: setVoiceMessageContent(holder); break; } } } } } }