按类型聚合会话
IMKit 支持在会话列表中按照会话类型进行聚合(折叠)。设置聚合显示的会话类型后,该类型的会话在会话列表中仅被展示为一个聚合条目。默认情况下,IMKit 的会话列表页面会以平铺方式展示所有本地会话。
下图展示了设置了单聊类型会话聚合显示的效果。在会话列表中 ,所有单聊会话折叠为“单聊消息”(左侧),点击后跳转到聚合会话列表(右侧)。
提示
IMKit 在默认的聚合会话页面 Activity(RongSubConversationListActivity
)包含了标题栏的实现。如果基于 Fragment 构建聚合会话列表页面,请自行实现标题栏。
局限
- 会话列表中的聚合会话项目不支持置顶操作。
设置聚合显示的会话类型
聚合会话功能支持单聊、群聊、系统会话类型。如需聚合显示,需要继承 BaseDataProcessor
实现自定义数据处理器,在打开会话列表页面之前提供给 IMKit。
-
声明自定义的数据处理器类
MyAggregateDataProcessor
,继承 SDK 的数据处理器BaseDataProcessor
。重写isGathered
的方法,。当会话类型为需要聚合显示的会话类型时,返回true
。下例中我们聚合显示所有系统会话。public class MyAggregateDataProcessor extends BaseDataProcessor<Conversation> {
/**
* 自定 义会话列表页面支持的会话类型,此处设置为支持单聊、群组和系统会话。
*/
@Override
public Conversation.ConversationType[] supportedTypes() {
Conversation.ConversationType[] types = {Conversation.ConversationType.PRIVATE, Conversation.ConversationType.GROUP, Conversation.ConversationType.SYSTEM};
return types;
}
/**
* 自定义需要聚合显示的会话。此处设置单聊会话聚合显示。
*/
@Override
public boolean isGathered(Conversation.ConversationType type) {
if (type.equals(Conversation.ConversationType.PRIVATE)) {
return true;
} else {
return false;
}
}
} -
在打开会话列表页面之前,使用方法设置会话列表数据处理器。
RongConfigCenter.conversationListConfig().setDataProcessor(new MyAggregateDataProcessor());
聚合会话列表页面
设置会话聚合后,在会话列表页面中,被聚合会话会被折叠为一个聚合会话条目(GatheredConversation
)。点击该条目后,SDK 会跳转到聚合会话列表页面。
IMKit 提供基于 Activity 类和基于 Fragment 类实现的聚合会话列表页面。
- 基于 Activity:IMKit 提供了默认的聚合会话列表页面
RongSubConversationListActivity
。页面支持一个标题栏和一个聚合会话列表。在 SDK 内部页面需要跳转到聚合会话列表时,默认会跳转到该 Activity。 - 基于 Fragment:您可以使用 IMKit 的
SubConversationListFragment
构建自定义聚合会话列表页面。注意,您需要将自定义会话列表 Activity 注册到 IMKit SDK 中,以替换 IMKit 默认的聚合会话列表 Activity。