美文网首页
环信聊天列表 置顶和删除

环信聊天列表 置顶和删除

作者: 啤酒小龙虾 | 来源:发表于2018-08-10 18:06 被阅读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);

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

        }

    }

    相关文章

      网友评论

          本文标题:环信聊天列表 置顶和删除

          本文链接:https://www.haomeiwen.com/subject/djqlbftx.html