会话列表页面
会话列表页面展示了当前用户设备上的所有会话。一旦 SDK 的本地消息数据库生成消息,SDK 就会生成会话列表,并按照时间倒序排列,置顶会话会排在最前。
IMKit 提供基于 Activity 类和基于 Fragment 类实现的会话列表页面。
- 基于 Activity:IMKit SDK 默认提供的会话列表。页面支持一个标题栏和一个会话列表。在 SDK 内部页面需要跳转到会话列表时,将跳转到默认的会话列表 Activity。
- 基于 Fragment:您可以在应用 Activity 中集成 IMKit 提供的会话列表 Fragment,即自定义会话列表 Activity。注意,您需要将自定义会话列表 Activity 注册到 IMKit SDK 中,以替换 IMKit 默认的会话列表 Activity。
会话列表界面
会话列表页面一般由标题栏和会话列表两部分组成。
IMKit 在默认会话列表页面 Activity(RongConversationListActivity
)包含了标题栏的实现。如果基于 Fragment 构建会话列表页面,请自行实现标题栏。
标题栏
IMKit 仅在默认会话列表页面 Activity(RongConversationListActivity
)实现了标题栏。默认展示「会话列表」。
会话列表
会话列表组件按时间倒序显示所有会话的列表,置顶会话会排在最前。长按会话列表中的会话时显示弹窗菜单。IMKit 默认已实现了置顶会话和删除会话功能。
会话列表的每个项目的视图是在 PrivateConversationProvider.java
和其他展示模板中创建和自定义的。您还可以继承使用 BaseDataProcessor
,聚合(折叠)或过滤需要在列表中展示的会话项目。
如果开启了多设备消息同步,在 换新设备登录 或 应用卸载重装 场景下,离线补偿机制仅可获取到最近(默认离线补偿天数为 1 天,最大 7 天)的单聊、群聊会话消息。早于该天数的会话无法通过离线补偿机制获取。因此,离线补偿后的会话列表可能与原设备上或卸载前的会话列表并不一致(您可能会有丢失部分会话的错觉)。
用法
IMKit 提供了 Activity 和 Fragment 来创建会话列表页面。RongConversationListActivity
是默认提供的会话列表页面。您可以根据需要,选择直接使用默认的会话列表页面 Activity,或者继承 RongConversationListActivity
,或者使用 ConversationListFragment
构建自定义会话列表 Activity。
IMKit 默认已经实现在会话列表页点击某条会话时,跳转 到对应的会话页面。
启动会话列表页面
启动会话列表 Activity 有两种启动方式:通过调用 SDK 内置的 Activity 路由器启动,或通过 intent 跳转。您也可以自定义会话列表页的启动方式,实现从应用的其它 Activity 启动会话列表页面。
使用 RouteUtils
RouteUtils
是 IMKit 内置的 Activity 路由器,封装了 SDK 内部各页面跳转方法,可避免应用程序进行重复的 intent 封装。
如果您构建了自定义的会话列表 Activity,必须先向 RouteUtils
注册自定义 Activity,才能通过这种方式跳转到自定义会话列表 Activity,否则跳转的是 SDK 默认的 RongConversationListActivity
。
跳转到会话列表 Activity:
RouteUtils.routeToConversationListActivity(context, title);
参数 | 类型 | 说明 |
---|---|---|
context | Context | activity 上下文 |
title | String | 会话列表页面标题。如果传空,会显示为默认标题 “会话列表”。 |
通过 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);
使用 Fragment 构建自定义会话列表 Activity
IMKit 提供的会话列表 Fragment 类名为 ConversationListFragment
。为方便应用程序自定义会话列表页面,推荐继承使用会话列表 Fragment 类,构建自定义的会话列表 Activity。注意,自定义会话列表 Activity 需要被注册到 IMKit SDK 中,以替换 IMKit 默认的会话列表 Activity。
-
您可以在应用 Activity 中集成 IMKit 提供的会话列表 Fragment。以下示 例声明一个新的
MyConversationListActivity
。<activity
android:name=".ui.activity.MyConversationListActivity"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize">
</activity> -
描述 Activity 布局。此处以
activity_conversation_list.xml
为例。<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/container" //此容器用于动态放置 fragment
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout> -
继承 IMKit 的
ConversationListFragment
创建子类,例如AppConversationListFragment
。在MyConversationListActivity
的onCreate()
方法中使用您自定义的会话列表 Fragment 子类。class MyConversationListActivity extends FragmentActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_conversation_list);
ConversationListFragment conversationListFragment=new AppConversationListFragment();
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.container, conversationListFragment);
transaction.commit();
}
} -
向
RouteUtils
注册自定义的会话列表 Activity,以替换 IMKit 默认的会话列表 Activity。方法在应用生命周期内、主进程中注册一次即可。RouteUtils.registerActivity(RouteUtils.RongActivityType.ConversationListActivity, MyConversationListActivity.class);
参数 类型 说明 activityType RongActivityType IMKit 内置的 Activity 类型枚举。此处为 RongActivityType.ConversationListActivity
class Class<? extends Activity>
应用自定义的会话列表 Activity 的类名。 注册完成后,在 SDK 内部页面需要跳转到会话列表场景时,SDK 会自动跳转到您注册的应用 Activity。