会话列表页面
会话列表页面展示当前设备上的所有会话。本地消息数据库生成消息后自动创建会话列表,并按时间倒序排列,置顶会话优先显示。
IMKit 提供基于 Activity 类和基于 Fragment 类实现的会话列表页面。
- 基于 Activity:IMKit SDK 默认提供会话列表 Activity,包含标题栏和会话列表视图。当 SDK 内部需要跳转至会话列表时,默认使用该 Activity。
- 基于 Fragment:您可以在自定义 Activity 中集成 IMKit 提供的会话列表 Fragment,实现个性化界面。注意:需将该 Activity 注册至 IMKit SDK,以覆盖默认会话列表 Activity。
会话列表界面
会话列表页面一般由标题栏和会话列表两部分组成。
IMKit 默认提供的 RongConversationListActivity 已内置标题栏实现。若基于 Fragment 构建会话列表页面,需自行实现标题栏功能。
标题栏
MKit 仅在默认的(RongConversationListActivity
)中实现了标题栏功能。默认展示会话列表。
会话列表
会话列表组件按时间倒序显示所有会话的列表,置顶会话会排在最前。长按会话列表中的会话时显示弹窗菜单,IMKit 默认实现了置顶/取消置顶会话和删除会话功能。
会话列表中默认会话的视图由 PrivateConversationProvider.java
等模板类创建。您可继承使用 BaseDataProcessor
,聚合(折叠)或过滤需要在列表中展示的会话项目。
如果开启了多设备消息同步,在换新设备登录或应用卸载重装场景下,离线补偿机制仅可获取到最近 1 天(默认离线补偿天数为 1 天,最大可调整为 7 天)的单聊、群聊会话消息。超出时限的会话无法通过离线补偿机制获取。因此,离线补偿后的会话列表可能与原设备上或卸载前的会话列表不一致(非数据丢失)。
用法
IMKit 提供了 Activity 和 Fragment 来创建会话列表页面。RongConversationListActivity
是默认提供的会话列表页面。您可以根据需要,选择直接使用默认的会话列表页面 Activity,或者继承 RongConversationListActivity
,或者使用 ConversationListFragment
构建自定义会话列表 Activity。
IMKit SDK 默认已经实现在会话列表页点击某条会话时,跳转到对应的会话页面。
启动会话列表页面
IMKit 提供以下方式启动会话列表:
- 内置路由:
RouteUtils.routeToConversationListActivity(context, title);
- 标准启动:
startActivity(new Intent(context, RongConversationListActivity.class));
使用 RouteUtils
RouteUtils
是 IMKit 内置的 Activity 路由器,封装了 SDK 内部各页面跳转方法。
如果您构建了自定义的会话列表 Activity,必须先向 RouteUtils
注册自定义 Activity,才能通过 RouteUtils
跳转到自定义会话列表 Activity,否则跳转的是 SDK 默认的 RongConversationListActivity
。
跳转到会话列表 Activity:
参数说明
参数 | 类型 | 说明 |
---|---|---|
context | Context | activity 上下文 |
title | String | 会话列表页面标题。如果传空,会显示为默认标题 “会话列表”。 |
示例代码
RouteUtils.routeToConversationListActivity(context, title);
通过 intent 跳转
您可以自己组装 Intent, 使用 Android 默认机制进行跳转。
Intent intent = new Intent(context, MyConversationListActivity.class);
context.startActivity(intent);
继承默认会话页面 Activity
您可以通过继承 RongConversationListActivity
创建自定义会话列表 Activity,实现对会话列表页面的调整。注意,必须向 RouteUtils
注册自定义的会话列表 Activity。注册之后,当 SDK 需要跳转到会话列表时,会跳转到您注册的自定义会话列表 Activity。注册方法在应用生命周期内、主进程中调用一次即可。
RouteUtils.registerActivity(RouteUtils.RongActivityType.ConversationListActivity, MyConversationListActivity.class);