ChannelListDialog 频道列表
Android IMKit 的频道列表/选择对话框,配合 ChatFragment 顶部频道栏使用:列表展示频道名、公开/私有、成员数与当前频道,支持创建(名称 + public/private)、加入、离开与进入。
运行时组件(非 IDL 契约)
本组件由 SDK 运行时直接提供,不是 IDL 契约组件:IMKit 契约(sdk-imkit)只声明 10 个契约组件(ConversationListView / ChatView / MessageBubble / MessageInput / Avatar / UnreadBadge / TimeSeparator / MessageStatusIndicator / Theme / IMKitFacade),不包含当前版本频道 UI 组件;因此下面的 props/事件以各端实际实现为准,跨端命名不保证一致。
打开频道列表
Kotlin
// 从聊天页打开(推荐:ChatFragment 已内置频道栏,点击即打开)
ChannelListDialog.newInstance(groupId = "g_1001", currentChannelId = "ch_news")
.show(parentFragmentManager, ChannelListDialog.TAG)
// 接收选择结果(ChatFragment 已内置该监听并 switchChannel)
parentFragmentManager.setFragmentResultListener(ChannelListDialog.REQUEST_KEY, this) { _, result ->
if (!result.containsKey(ChannelListDialog.RESULT_CHANNEL_ID)) return@setFragmentResultListener
val channelId = result.getString(ChannelListDialog.RESULT_CHANNEL_ID).orEmpty()
val channelName = result.getString(ChannelListDialog.RESULT_CHANNEL_NAME).orEmpty()
// channelId 为空 = 群级消息;否则进入该频道视图
}对话框行为
| 能力 | 行为 | 依赖 IMLib API |
|---|---|---|
| 列表 | 频道名、公开/私有、成员数(userIds.size)、当前频道高亮;加载中/空态/错误提示 | listSupergroupChannels(groupId) |
| 群级消息 | 列表顶部「群级消息」行,选中后结果 channelId 为空 | — |
| 进入频道 | 选中后「进入」回传结果,ChatFragment 清空消息列表并按新 channelId 拉首屏历史 | getHistoryMessages(..., HistoryOptions(channelId=…)) |
| 创建 | 内置对话框:名称 + public/private 类型选择,成功后刷新列表 | createSupergroupChannel(CreateSupergroupChannelParams(...)) |
| 加入 | public 频道可直接加入;private 需邀请后加入(错误码透出) | joinSupergroupChannel(channelId, SupergroupChannelOptions(groupId)) |
| 离开 | 已加入频道显示「离开」,成功后刷新 | leaveSupergroupChannel(...) |
ChatFragment 频道栏
| 项 | 说明 |
|---|---|
| 入口 | ChatFragment 顶部 channel_bar(布局 imkit_view_chat.xml),显示「群级消息」或「当前频道名」 |
| 点击 | 打开 ChannelListDialog;选择后 switchChannel 清空消息并按 channelId 重新拉取 |
| 发送透传 | 频道视图下发送/重发使用 SendOptions(clientMsgId, channelId);群级视图 channelId 为空 |
| Intent 入口 | ImkitIntents.EXTRA_CHANNEL_ID:从外部直接进入某频道会话(IMKit.routeToConversation 已支持 ConversationIdentifier(channelId)) |
| 文案/颜色 | 字符串 imkit_channel_*;颜色 imkit_surface/text/text_secondary/primary/selected_bg,values-night 自动深色 |
公开常量
| 常量 | 值 |
|---|---|
| ChannelListDialog.TAG | imkit.channel.list |
| ChannelListDialog.REQUEST_KEY | io.nipaas.imkit.channel.SELECT |
| ChannelListDialog.RESULT_CHANNEL_ID | io.nipaas.imkit.channel.RESULT_ID |
| ChannelListDialog.RESULT_CHANNEL_NAME | io.nipaas.imkit.channel.RESULT_NAME |
限制
- Dialog 不做频道成员管理(成员增删用 Server API
channel/members/*)。 - 创建频道只支持名称 + 类型;加入策略由 type 推导(public→open、private→invite),不支持自定义 joinPolicy。
- 频道级未读/回执未拆分;列表中的成员数来自
userIds.size(不含仅通过用户组绑定的成员,如需准确人数请以服务端返回为准)。