IMKit 4.X SDK 如何自定义会话列表?

本文仅适用于 IMKit SDK 4.X 版本。用户可以使用 ConversationListFragment 的接口设置自己的 adapter 实现对会话列表的自定义

public void setAdapter(ConversationListAdapter adapter)
public ConversationListAdapter getAdapter();

使用方法:

  1. 继承并实现 adapter,自定义 adapter 中的布局及显示,例如:自定义会话列表未读消息数显示红点,不显示未读数目

  2. public class ConversationListAdapterEx extends ConversationListAdapter {
        public ConversationListAdapterEx(Context context) {
            super(context);
        }
    
        @Override
        protected View newView(Context context, int position, ViewGroup group) {
            return super.newView(context, position, group);
        }
    
        @Override
        protected void bindView(View v, int position, UIConversation data) {
        if(data.getConversationType().equals(Conversation.ConversationType.DISCUSSION))
            data.setUnreadType(UIConversation.UnreadRemindType.REMIND_ONLY);
            super.bindView(v, position, data);
        }
    }
    
  3. 在实例化 ConversationListFragment 时,设置 adapter

    ConversationListFragment listFragment = ConversationListFragment.getInstance();
    listFragment.setAdapter(new ConversationListAdapterEx(RongContext.getInstance()));
    Uri uri = Uri.parse("rong://" + getApplicationInfo().packageName).buildUpon()
            .appendPath("conversationlist")
            .appendQueryParameter(Conversation.ConversationType.PRIVATE.getName(), "false") //设置私聊会话是否聚合显示
            .appendQueryParameter(Conversation.ConversationType.GROUP.getName(), "false")//群组
            .appendQueryParameter(Conversation.ConversationType.DISCUSSION.getName(), "false")//讨论组
            .appendQueryParameter(Conversation.ConversationType.PUBLIC_SERVICE.getName(), "false")//公共服务号
            .appendQueryParameter(Conversation.ConversationType.SYSTEM.getName(), "false")//系统
            .build();
    listFragment.setUri(uri);
    

IMKit 5.x 用户可直接参考开发者文档: https://doc.rongcloud.cn/im/Android/5.X/ui/conversationlist/custom