会话列表页面
会话列表页面展示了当前用户设备上的所有会话。一旦 SDK 的本地消息数据库生成消息,SDK 就会生成会话列表,并按照时间倒序排列,置顶会话会排在最前。
Global IM UIKit 提供基于 Activity 类和基于 Fragment 类实现的会话列表页面。
- 基于 Activity:Global IM UIKit 默认提供的会话列表
ChatListActivity。在 SDK 内部页面需要跳转到会话列表时,将跳转到默认的会话列表 Activity。 - 基于 Fragment:您可以在应用 Activity 中集成 Global IM UIKit 提供的会话列表
ChatListFragment,即自定义会话列表 Activity。注意,您需要将自定义会话列表 Activity 注册到 Global IM UIKit SDK 中,以替换 Global IM UIKit 默认的会话列表 Activity。
会话列表界面
会话列表界面一般由两个部分组成:导航栏和会话列表。
会话列表页面结构
- ChatListActivity:给
ChatListFragment提供装载容器,没有具体实现。 - ChatListFragment:绑定
ViewModel以及页面中的各个组件 Component,并给组件提供数据源的能力。 - ChatListModule:负责
ChatListFragmentUI 展示,并初始化当前页面的各个组件。 - ChatListViewModel:提供会话列表页面的数据源以及所有操作的接口。
会话列表页面组件
- HeaderComponent:导航组件,提供了
连接状态提示的显示以及搜索入口按钮。 - HeaderSelectComponent:多选模式组件,长按选择会话时触发多选模式,Global IM UIKit 默认已实现了
会话免打扰、会话已读、置顶会话和删除会话的功能。 - ChatListComponent:会话列表组件,按时间倒序显示所有会话的列表,置顶会话会排在最前。长按会话列表中的会话时会默认触发
多选模式以及选中当前会话。 会话列表的每个项目的视图是在BaseChatListItemProvider.java和创建和自定义的。 - PageStatusComponent:页面状态组件,当前会话列表没有数据时显示。
页面效果展示

如果在控制台开启了多设备消息同步功能,在 换新设备登录 或 应用卸载重装 场景下,离线补偿机制仅可获取到最近(默认离线补偿天数为 1 天,最大 7 天)的单聊、群聊会话消息。早于该天数的会话无法通过离线补偿机制获取。因此,离线补偿后的会话列表可能与原设备上或卸载前的会话列表并不一致(您可能会有丢失部分会话的错觉)。
用法
Global IM UIKit 提供了 Activity 和 Fragment 来创建会话列表页面。ChatListActivity 是默认提供的会话列表页面。您可以根据需要,选择直接使用默认的会话列表页面 Activity,也可以选择继承 ChatListActivity 或者使用 ChatListFragment 构建自定义会话列表 Activity。
Global IM UIKit 默认已经实现在会话列表页点击某条会话时,跳转到对应的会话页面。
启动会话列表页面
启动会话列表 Activity 有两种启动方式:通过调用 SDK 内置的 Activity 路由器启动,或通过 intent 跳转。您也可以自定义会话列表页的启动方式,实现从应用的其它 Activity 启动会话列表页面。
使用 RouteUtil
RouteUtil 是 Global IM UIKit 内置的 Activity 路由器,封装了 SDK 内部各页面跳转方法,可避免应用程序进行重复的 intent 封装。
如果您构建了自定义的会话列表 Activity,必须先向
RouteUtil注册自定义 Activity,才能通过这种方式跳转到自定义会话列表 Activity,否则跳转的是 SDK 默认的ChatListActivity。
跳转到会话列表 Activity:
RouteUtil.routeToChatListActivity(context);
通过 intent 跳转
您可以自己组装 Intent, 使用 Android 默认机制进行跳转。
Intent intent = new Intent(context, MyChatListActivity.class);
context.startActivity(intent);
继承默认会话页面 Activity
您可以通过继承 ChatListActivity 创建自定义会话列表 Activity,实现对会话列表页面的调整。注意,必须向 RouteUtil 注册自定义的会话列表 Activity。注册之后,当 SDK 需要跳转到会话列表时,会跳转到您注册的自定义会话列表 Activity。注册方法在应用生命周期内、主进程中调用一次即可。
RouteUtil.registerActivity(RouteUtil.ActivityType.CHAT_LIST_ACTIVITY, MyChatListActivity.class);
使用 自定义 ChatListFragment 构建自定义会话列表
Global IM UIKit 提供的会话列表 Fragment 类名为 ChatListFragment。为方便应用程序自定义会话列表页面,推荐继承使用会话列表 ChatListFragment 类,构建自定义的会话列表 Activity。通过重写工厂方法的方式
-
您需要首先通过继承
KitFragmentFactory来重写您希望自定义的Fragment的方法。请参阅下面的代码作为示例。Javapublic class CustomFragmentFactory extends KitFragmentFactory {
@NonNull
@Override
public Fragment newChatListFragment(@NonNull Bundle args) {
return new ChatListFragment.Builder()
.withArguments(args)
.setCustomFragment(new CustomChatListFragment())
.build();
}
}