package com.fanxin.app.fx; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Hashtable; import java.util.List; import java.util.Map; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; 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.fanxin.app.Constant; import com.fanxin.app.MYApplication; import com.fanxin.app.R; import com.fanxin.app.fx.others.ConversationAdapter; import com.fanxin.app.fx.others.TopUser; public class FragmentCoversation extends Fragment { private boolean hidden; private ListView listView; private ConversationAdapter adapter; private List<EMConversation> normal_list = new ArrayList<EMConversation>(); private List<EMConversation> top_list = new ArrayList<EMConversation>(); private Map<String, TopUser> topMap; public RelativeLayout errorItem; public TextView errorText; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_home, container, false); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); if (savedInstanceState != null && savedInstanceState.getBoolean("isConflict", false)) return; errorItem = (RelativeLayout) getView().findViewById(R.id.rl_error_item); errorText = (TextView) errorItem.findViewById(R.id.tv_connect_errormsg); topMap = MYApplication.getInstance().getTopUserList(); normal_list.addAll(loadConversationsWithRecentChat()); listView = (ListView) getView().findViewById(R.id.list); adapter = new ConversationAdapter(getActivity(), normal_list, top_list,topMap); // 设置adapter listView.setAdapter(adapter); } /** * 刷新页面 */ public void refresh() { normal_list.clear(); normal_list.addAll(loadConversationsWithRecentChat()); adapter = new ConversationAdapter(getActivity(), normal_list, top_list,topMap); listView.setAdapter(adapter); } /** * 获取所有会话 * * @param context * @return + */ private List<EMConversation> loadConversationsWithRecentChat() { // 获取所有会话,包括陌生人 Hashtable<String, EMConversation> conversations = EMChatManager .getInstance().getAllConversations(); List<EMConversation> list = new ArrayList<EMConversation>(); List<EMConversation> topList1 = new ArrayList<EMConversation>(); // 置顶列表再刷新一次 // 过滤掉messages seize为0的conversation for (EMConversation conversation : conversations.values()) { if (conversation.getAllMessages().size() != 0) { // 不在置顶列表里面 if (!topMap.containsKey(conversation.getUserName())) { list.add(conversation); } else { // 在置顶列表里面 topList1.add(conversation); } // // for(EMMessage msg:conversation.getAllMessages()){ // if(msg.getFrom().equals("admin")){ // try { // Log.e("type--->>",msg.getStringAttribute("type")); // Log.e("groupid--->>",msg.getStringAttribute("groupid")); // } catch (EaseMobException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // } // // } } } top_list.clear(); top_list.addAll(topList1); // 排序 sortConversationByLastChatTime(list); sortConversationByLastChatTime(top_list); return list; } /** * 根据最后一条消息的时间排序 * * @param usernames */ private void sortConversationByLastChatTime( List<EMConversation> conversationList) { Collections.sort(conversationList, new Comparator<EMConversation>() { @Override public int compare(final EMConversation con1, final EMConversation con2) { EMMessage con2LastMessage = con2.getLastMessage(); EMMessage con1LastMessage = con1.getLastMessage(); if (con2LastMessage.getMsgTime() == con1LastMessage .getMsgTime()) { return 0; } else if (con2LastMessage.getMsgTime() > con1LastMessage .getMsgTime()) { return 1; } else { return -1; } } }); } @Override public void onHiddenChanged(boolean hidden) { super.onHiddenChanged(hidden); this.hidden = hidden; if (!hidden) { refresh(); } } @Override public void onResume() { super.onResume(); if (!hidden && !((MainActivity) getActivity()).isConflict) { refresh(); } } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); if (((MainActivity) getActivity()).isConflict) { outState.putBoolean("isConflict", true); } else if (((MainActivity) getActivity()).getCurrentAccountRemoved()) { outState.putBoolean(Constant.ACCOUNT_REMOVED, true); } } }