项目中要实现聊天列表的置顶和删除,自己不想重新去封装就在源码上做了改动
准备:
滑动删除item:
compile'com.github.qdxxxx:SwipeMenuContainer:v1.0.3'
事件传递机制
compile'org.greenrobot:eventbus:3.1.1'
1.首先找到ease_row_chat_history.xml 这个是聊天列表条目布局
引入SwipeMenuLayout 。
2. 找到 :EaseConversationAdapter
这个是适配器 在这里做一下点击事件的操作
在Viewholder添加 布局中新加的控件
在 getView()方法里面 查找按钮
添加点击事件
//置顶点击事件
holder.btnToTop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String isTop =conversation.getExtField();
//判断是否是置顶消息
if ("toTop".equals(isTop)) {
//取消置顶,就设置为其他的字符串
conversation.setExtField("false");
}else {
//把它设置为置顶的标识
conversation.setExtField("toTop");
}
//刷新消息列表
EventBus.getDefault().post(new ReshEvent(true));
}
});
//删除的点击事件
holder.btnDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//删除和某个user会话,如果需要保留聊天记录,传false
EMGroup group = EMClient.getInstance().groupManager().getGroup(conversation.conversationId());
String name = group !=null ? group.getGroupName() :conversation.conversationId();
EMClient.getInstance().chatManager().deleteConversation(name, true);
conversationList.remove(position);
// holder.es.collapseSmooth();
notifyDataSetChanged();
}
});
//关闭侧滑 刷新界面
holder.es.collapseSmooth();
//点击条目
holder.rl_content.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Toast.makeText(getContext(), "条目", Toast.LENGTH_SHORT).show();
EventBus.getDefault().post(new ItemEvent(position));
}
});
这里还需要加上
//判断是否置顶,置顶改变文字
String isTop = conversation.getExtField();
if ("toTop".equals(isTop)) {
holder.btnToTop.setText("取消置顶");
holder.list_itease_layout.setBackgroundResource(R.drawable.ease_mm_top_listitem);
}else {
holder.btnToTop.setText("置顶");
holder.list_itease_layout.setBackgroundResource(R.drawable.ease_mm_listitem);
}
3.找到EaseConversationListFragment
首先先注册一下eventBus
在 protected List<EMConversation> loadConversationList() {} 里面添加
//添加置顶消息
List> topList =new ArrayList>();
synchronized (conversations) {
for (EMConversation conversation : conversations.values()) {
if (conversation.getAllMessages().size() !=0 && conversation.getExtField().equals("toTop")) {
topList.add(new Pair(conversation.getLastMessage().getMsgTime(), conversation));
}
}
}
注意这里一定要修改之前的消息集合
然后再加入集合中 别忘记加入新的置顶集合
//添加置顶消息
for (Pair topItem : topList) {
list.add(topItem.second);
}
for (Pair sortItem : sortList) {
list.add(sortItem.second);
}
然后别忘记 之前adapter里面传递过来的 eventBus 事件
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEvent(ReshEvent reshEvent) {
if (reshEvent !=null) {
if (reshEvent.isResh()) {
refresh(); //刷新条目
}
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventItem(ItemEvent itemEvent) {
if (itemEvent !=null) {
int position = itemEvent.getItem();
EMConversation conversation =conversationListView.getItem(position);
listItemClickListener.onListItemClicked(conversation);
//用了侧滑条目会把之前的条目点击事件屏蔽掉 所以自定义了条目的点击事件发送到这里进行传递
}
}
网友评论