package com.kaixin.android.activity; import java.util.List; import android.graphics.BitmapFactory; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ImageView; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.TextView; import com.easemob.chat.EMChatManager; import com.easemob.chat.EMConversation; import com.easemob.chat.EMMessage; import com.easemob.chat.TextMessageBody; import com.kaixin.android.KXActivity; import com.kaixin.android.R; import com.kaixin.android.result.ChatResult; import com.kaixin.android.utils.PhotoUtil; import com.kaixin.android.utils.TextUtil; import com.kaixin.android.utils.Utils; /** * 聊天记录类 * * @author gyz * */ public class ChatLogsActivity extends KXActivity { private Button mBack; private ListView mDisplay; private String mName;// 当前聊天记录的所属用户姓名 private String mAvatar; // 当前聊天记录的所属用户头像 private String mEmail; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.chatlogs_activity); findViewById(); setListener(); init(); } private void findViewById() { mBack = (Button) findViewById(R.id.chatlogs_back); mDisplay = (ListView) findViewById(R.id.chatlogs_display); } private void setListener() { mBack.setOnClickListener(new OnClickListener() { public void onClick(View v) { // 关闭当前界面 finish(); } }); } private void init() { // 接收当前聊天记录所属用户的姓名和头像 mName = getIntent().getStringExtra("name"); mEmail = getIntent().getStringExtra("email"); mAvatar = getIntent().getStringExtra("avatar"); mBack.setText(mName); getChat(mEmail); // 添加适配器 mDisplay.setAdapter(new ChatLogsAdapter()); } /** * 获取聊天记录 */ private void getChat(String username) { // 判断存储的聊天记录是否已经存在,存在则不在获取 if (!mKXApplication.mChatResults.isEmpty()) { mKXApplication.mChatResults.clear(); EMConversation conversation = EMChatManager.getInstance().getConversation(username); //获取此会话的所有消息 List<EMMessage> messages = conversation.getAllMessages(); ChatResult result = null; for (int i = 0; i < messages.size(); i++) { result = new ChatResult(); result.setTime(Utils.formatDate(ChatLogsActivity.this, messages.get(i).getMsgTime())); TextMessageBody textBody = (TextMessageBody) messages.get(i).getBody(); result.setContent(textBody.getMessage()); if(messages.get(i).getFrom().equals(username)){ result.setType(2); }else{ result.setType(1); } mKXApplication.mChatResults.add(result); } } } public class ChatLogsAdapter extends BaseAdapter { public int getCount() { return mKXApplication.mChatResults.size(); } public Object getItem(int position) { return mKXApplication.mChatResults.get(position); } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { convertView = LayoutInflater.from(ChatLogsActivity.this) .inflate(R.layout.chat_activity_item, null); holder = new ViewHolder(); holder.in = (RelativeLayout) convertView .findViewById(R.id.chat_item_in_layout); holder.out = (RelativeLayout) convertView .findViewById(R.id.chat_item_out_layout); holder.inAvatar = (ImageView) convertView .findViewById(R.id.chat_item_in_avatar); holder.outAvatar = (ImageView) convertView .findViewById(R.id.chat_item_out_avatar); holder.inName = (TextView) convertView .findViewById(R.id.chat_item_in_name); holder.outName = (TextView) convertView .findViewById(R.id.chat_item_out_name); holder.inTime = (TextView) convertView .findViewById(R.id.chat_item_in_time); holder.outTime = (TextView) convertView .findViewById(R.id.chat_item_out_time); holder.inContent = (TextView) convertView .findViewById(R.id.chat_item_in_content); holder.outContent = (TextView) convertView .findViewById(R.id.chat_item_out_content); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } ChatResult result = mKXApplication.mChatResults.get(position); // 根据消息的类型,显示不同的界面效果,1为用户自己发出的消息,2为用户收到的消息 switch (result.getType()) { case 1: holder.in.setVisibility(View.GONE); holder.out.setVisibility(View.VISIBLE); holder.outAvatar.setImageBitmap(PhotoUtil.toRoundCorner( BitmapFactory.decodeResource(getResources(), R.drawable.head), 15)); holder.outName.setText("我"); holder.outTime.setText(result.getTime()); holder.outContent.setText(new TextUtil(mKXApplication) .replace(result.getContent())); break; case 2: holder.out.setVisibility(View.GONE); holder.in.setVisibility(View.VISIBLE); holder.inAvatar.setImageBitmap(mKXApplication .getAvatar(mAvatar)); holder.inName.setText(mName); holder.inTime.setText(result.getTime()); holder.inContent.setText(new TextUtil(mKXApplication) .replace(result.getContent())); break; } return convertView; } class ViewHolder { RelativeLayout in; RelativeLayout out; ImageView inAvatar; ImageView outAvatar; TextView inName; TextView outName; TextView inTime; TextView outTime; TextView inContent; TextView outContent; } } }