环信聊天列表 置顶和删除

2018-08-10  本文已影响0人  啤酒小龙虾

项目中要实现聊天列表的置顶和删除,自己不想重新去封装就在源码上做了改动

准备:

滑动删除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);

//用了侧滑条目会把之前的条目点击事件屏蔽掉  所以自定义了条目的点击事件发送到这里进行传递

    }

}

上一篇下一篇

猜你喜欢

热点阅读