package com.hx.hxchat.holder; import java.util.Date; import java.util.List; import java.util.Map; import android.annotation.SuppressLint; import android.annotation.TargetApi; import android.content.Context; import android.os.Build; import android.view.View; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.TextView.BufferType; import com.easemob.chat.EMConversation; import com.easemob.chat.EMGroup; import com.easemob.chat.EMGroupManager; import com.easemob.chat.EMMessage; import com.easemob.chat.TextMessageBody; import com.easemob.exceptions.EaseMobException; import com.easemob.util.DateUtils; import com.hx.hxchat.Constant; import com.hx.hxchat.domain.TopUser; import com.hx.hxchat.domain.User; import com.hx.hxchat.utils.SmileUtils; import com.hx.hxchat.utils.UserUtils; import com.mgw.member.R; import com.mgw.member.manager.BaseApplication; import com.mgw.member.uitls.UIUtils; import com.squareup.picasso.Picasso; /** * 视图展示(不负责数据加载) * * @author huyan * */ @TargetApi(Build.VERSION_CODES.JELLY_BEAN) @SuppressLint("NewApi") public class ChatHistoryListItemHolder extends BaseHolder<EMConversation> { public ChatHistoryListItemHolder() { super(); } @Override public void recycle() { } /** 和谁的聊天记录 */ private TextView tv_name; /** 消息未读数 */ private TextView tv_unread; /** 最后一条消息的内容 */ private TextView tv_content; /** 最后一条消息的时间 */ private TextView tv_time; /** 用户头像 */ private ImageView iv_avatar; /** qun头像 */ private ImageView avatar1; /** qun头像 */ private ImageView avatar2; /** qun头像 */ private ImageView avatar3; /** qun头像 */ private ImageView avatar4; /** qun头像 */ private RelativeLayout rl_group_avatar; /** 最后一条消息的发送状态 */ private View msgState; /** 整个list中每一行总布局 */ private RelativeLayout list_item_layout; @Override protected View initView() { View convertView = UIUtils.inflate(R.layout.row_chat_history); tv_name = (TextView) convertView.findViewById(R.id.name); tv_unread = (TextView) convertView.findViewById(R.id.unread_msg_number); tv_content = (TextView) convertView.findViewById(R.id.message); tv_time = (TextView) convertView.findViewById(R.id.time); iv_avatar = (ImageView) convertView.findViewById(R.id.avatar); avatar1 = (ImageView) convertView.findViewById(R.id.iv_avatar1); avatar2 = (ImageView) convertView.findViewById(R.id.iv_avatar2); avatar3 = (ImageView) convertView.findViewById(R.id.iv_avatar3); avatar4 = (ImageView) convertView.findViewById(R.id.iv_avatar4); rl_group_avatar = (RelativeLayout) convertView .findViewById(R.id.rl_group_avatar); msgState = convertView.findViewById(R.id.msg_state); list_item_layout = (RelativeLayout) convertView .findViewById(R.id.list_item_layout); return convertView; } @Override public void setData(EMConversation data) { super.setData(data); } @Override public void refreshView() { // 获取与此用户/群组的会话 EMConversation conversation = getData(); String nick; // 获取用户username或者群组groupid final String userid = conversation.getUserName(); List<EMGroup> groups = EMGroupManager.getInstance().getAllGroups(); if (conversation.isGroup()) { iv_avatar.setVisibility(View.GONE); rl_group_avatar.setVisibility(View.VISIBLE); EMGroup group = EMGroupManager.getInstance().getGroup(userid); tv_name.setText(group != null ? group.getGroupName() : conversation .getUserName()); String groupsicons = BaseApplication.getApplication() .GetGroupsDao().getGropsIcon(userid); if (groupsicons != null && !"".equals(groupsicons)) { String[] split = groupsicons.split("#"); UserUtils.setGroupsIcon(avatar1, avatar2, avatar3, avatar4, split); } } else { iv_avatar.setVisibility(View.VISIBLE); rl_group_avatar.setVisibility(View.GONE); tv_name.setText(conversation.getUserName() + "gere"); // 从好友列表中加载该用户的资料 User user = UserUtils.getUserInfo(userid); if (user != null) { nick = user.getNick(); String comment = BaseApplication.getApplication().GetUserDao().getComment(user.getUsername()); String avatar = user.getAvatar(); // 显示昵称 tv_name.setText(comment!=null?comment+"["+nick+"]":nick); // 显示头像 UserUtils.showUserAvatar(iv_avatar, avatar); } else { EMMessage message = conversation.getLastMessage(); if (message.direct == EMMessage.Direct.RECEIVE) { try { nick = message.getStringAttribute("myUserNick"); String avatar = message .getStringAttribute("myUserAvatar"); // 显示昵称 tv_name.setText(nick); // 显示头像 UserUtils.showUserAvatar(iv_avatar, avatar); } catch (EaseMobException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else { try { nick = message.getStringAttribute("toUserNick"); String avatar = message .getStringAttribute("toUserAvatar"); // 显示昵称 tv_name.setText(nick); // 显示头像 UserUtils.showUserAvatar(iv_avatar, avatar); } catch (EaseMobException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } if (conversation.getUnreadMsgCount() > 0) { // 显示与此用户的消息未读数 tv_unread.setText(String.valueOf(conversation.getUnreadMsgCount())); tv_unread.setVisibility(View.VISIBLE); } else { tv_unread.setVisibility(View.INVISIBLE); } if (conversation.getMsgCount() != 0) { // 把最后一条消息的内容作为item的message内容 EMMessage lastMessage = conversation.getLastMessage(); tv_content.setText( SmileUtils.getSmiledText( UIUtils.getContext(), UserUtils.getMessageDigest(lastMessage, UIUtils.getContext())), BufferType.SPANNABLE); tv_time.setText(DateUtils.getTimestampString(new Date(lastMessage .getMsgTime()))); if (lastMessage.direct == EMMessage.Direct.SEND && lastMessage.status == EMMessage.Status.FAIL) { msgState.setVisibility(View.VISIBLE); } else { msgState.setVisibility(View.GONE); } } Map<String, TopUser> topUserList = BaseApplication.getApplication() .getTopUserList(); if (topUserList.containsKey(conversation.getUserName())) { list_item_layout.setBackgroundResource(R.drawable.mm_listtopitem); }else{ if (getPosition() % 2 == 0) { list_item_layout.setBackgroundResource(R.drawable.mm_listitem); } else { list_item_layout.setBackgroundResource(R.drawable.mm_listitem_grey); } } } }