会话列表自定义
会话列表控制需要展示的会话类型
SDK 会话列表默认仅支持单聊和群聊两种会话。
您可以通过 setSupportedTypes
传入对应的会话类型枚举来配置会话列表展示的会话类型,需要在会话列表展示前设置,最多可以支持 单聊、群聊、系统会话。
示例代码
TypeScript
// 读取会话列表当前的配置
let config = RongIM.getInstance().conversationListService().getConversationListConfig()
// 设置会话列表仅展示单聊
config.setSupportedTypes([ConversationType.Private])
// 更新会话列表配置
RongIM.getInstance().conversationListService().setConversationListConfig(config)
会话列表组件自定义聚合展示
您可以通过为 ConversationListComponent
组件设置 dataProcessor
参数,实现更灵活的会话列表数据源管理。
提示
- 从
1.7.2
版本开始支持。 - 一旦使用该参数,将会覆盖前述通过
setSupportedTypes
配置的会话类型展示方式。
示例代码
TypeScript
// 仅展示单聊会话
ConversationListComponent({dataProcessor: {
supportedTypes: [ConversationType.Private]
}})
// 仅展示群聊会话
ConversationListComponent({dataProcessor: {
supportedTypes: [ConversationType.Group]
}})
// 自定义聚合(以获取未读数不为 0 的会话列表为例)
ConversationListComponent({dataProcessor: {
onFetchConversationList: async (time: number) => {
// 自定义请求会话列表数据
const cons = new List<ConversationType>()
cons.add(ConversationType.Group)
cons.add(ConversationType.Private)
const list: List<Conversation> = new List<Conversation>()
const res = await IMEngine.getInstance().getUnreadConversations(cons)
if (res.code === EngineError.Success && res.data && res.data.length > 0) {
res.data.forEach(item => {
list.add(item)
})
options.time = res.data.getLast().lastOperateTime
}
return list
},
// 设置会话数据过滤方法
onConversationFilter: (item: Conversation) => {
return item.unreadMessageCount > 0
}
}})
会话列表增加长按事件
您可以通过 addConversationItemLongClickActio
方法自行增加会话列表的长按事件:
示例代码
TypeScript
private addConversationListLongClickAction() {
let action: ItemLongClickAction<Conversation> = {
// 显示标题
obtainTitle: (context: Context, data: Conversation): string | Resource => {
return "自定义长按事件";
},
// 长按 item 的点击事件
onClick: (context: Context, data: Conversation) => {
promptAction.showToast({ message: "会话列表自定义长按事件" })
},
// 过滤条件,true 代表需要显示,false 代表不会显示
onFilter: (data: Conversation): boolean => {
// 可以动态配置特定的 Conversation 才显示该长按 item
return true;
},
actionId: 'Conversation_Custom' // 动作 Id,可自定义
}
RongIM.getInstance().conversationListService().addConversationItemLongClickAction(action);
}