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.TAGimkit.channel.list
ChannelListDialog.REQUEST_KEYio.nipaas.imkit.channel.SELECT
ChannelListDialog.RESULT_CHANNEL_IDio.nipaas.imkit.channel.RESULT_ID
ChannelListDialog.RESULT_CHANNEL_NAMEio.nipaas.imkit.channel.RESULT_NAME

限制​

  • Dialog 不做频道成员管理(成员增删用 Server API channel/members/*)。
  • 创建频道只支持名称 + 类型;加入策略由 type 推导(public→open、private→invite),不支持自定义 joinPolicy。
  • 频道级未读/回执未拆分;列表中的成员数来自 userIds.size(不含仅通过用户组绑定的成员,如需准确人数请以服务端返回为准)。

相关链接​