会话消息界面事件监听

更新时间: 2024/03/15 18:26:23

IM UIKit 会话列表模块(ChatKit-ui)提供会话列表监听器IMessageItemClickListener监听会话消息界面中的点击事件,帮助您快速实现相应的点击逻辑。您也可通过改动源码的的方式设置事件监听。

通过监听器监听

监听器说明

创建IMessageItemClickListener时可调用其内置方法,分别监听消息的点击事件、长按事件和头像点击等。

  • 方法说明
方法名称
方法说明 参数说明
onMessageClick 会话中消息的点击事件 onMessageClick的参数如下
  • view:会话消息界面被点击的View
  • ChatMessageBean消息 Item 数据,具体见下文的ChatMessageBean 说明
  • position:被点击的会话消息在列表中的位置
onMessageLongClick 会话消息的长按事件 onMessageLongClick的参数说明如下
  • view:会话消息界面被点击的View
  • ChatMessageBean消息 Item 数据,具体见下文的ChatMessageBean 说明
  • position:被点击的会话消息在列表中的位置
onUserIconClick 会话消息的头像点击事件 onUserIconClick的参数说明如下
  • view:会话消息界面被点击的View
  • ChatMessageBean消息 Item 数据,具体见下文的ChatMessageBean 说明
onSelfIconClick 会话消息的头像点击事件 onSelfIconClick的参数说明如下
  • view:会话消息界面被点击的View
  • ChatMessageBean消息 Item 数据,具体见下文的ChatMessageBean 说明
onUserIconLongClick 会话消息的头像长按事件 onUserIconLongClick的参数说明如下
  • view:会话消息界面被点击的View
  • ChatMessageBean消息 Item 数据,具体见下文的ChatMessageBean 说明
onReplyMessageClick 会话中回复消息的点击事件 onReplyMessageClick的参数说明如下
  • view:会话消息界面被点击的View
  • ChatMessageBean消息 Item 数据,具体见下文的ChatMessageBean 说明
onReEditRevokeMessage 会话中已撤回消息的编辑点击事件 onReEditRevokeMessage的参数说明如下
  • view:会话消息界面被点击的View
  • ChatMessageBean消息 Item 数据,具体见下文的ChatMessageBean 说明
onSendFailBtnClick 会话消息发送失败图标点击事件 onSendFailBtnClick的参数说明如下
  • view:会话消息界面被点击的View
  • ChatMessageBean消息 Item 数据,具体见下文的ChatMessageBean 说明

下图中红框所示的单个消息区域即为一个消息 Item

消息Item.png

  • ChatMessageBean 说明

ChatMessageBean为会话消息数据实体类,其成员参数见下表。

属性或方法 类型 说明
haveRead boolean 标记消息是否为已读
messageData IMMessageInfo 消息实体类,消息内容
isSameMessage() boolean 判断是否为同一条消息

示例代码

java//1、实现点击事件
ChatUIConfig config = new ChatUIConfig();
        config.messageItemClickListener = new IMessageItemClickListener() {
            @Override
            public boolean onMessageLongClick(View view, ChatMessageBean messageInfo) {
                ...
            }

            @Override
            public void onUserIconClick(View view, ChatMessageBean messageInfo) {
                ...
            }

            @Override
            public void onSelfIconClick(View view) {
                ...
            }
            ...
        };
//2、将自定义事件设置到ChatKitClient即可
ChatKitClient.setChatUIConfig(config);

通过源码改动实现监听

会话列表的实现逻辑都包含在ChatBaseFragment中,如果需要修改消息体的点击事件和长按事件的监听等,可以对itemClickListener实例的源码进行修改。

java private final IMessageItemClickListener itemClickListener = new IMessageItemClickListener() {
        @Override
        public boolean onMessageLongClick(View view, ChatMessageBean messageBean) {
            if (messageBean.isRevoked()) {
                return false;
            }
            //展示长按菜单,具体代码参考源码
            ...
            return true;
        }

        @Override
        public void onMessageClick(View view, int position, ChatMessageBean messageBean) {
            //消息点击事件实现
            if (messageBean.getViewType() == MsgTypeEnum.image.getValue()) {
                //图片消息,打开图片
                watchImage(messageBean,
                        binding.chatView.getMessageListView().filterMessagesByType(messageBean.getViewType()));
            } else if (messageBean.getViewType() == MsgTypeEnum.video.getValue()) {
                //视频消息,播放视频
                watchVideo(messageBean.getMessageData().getMessage());
            }
        }

        @Override
        public void onUserIconClick(View view, ChatMessageBean messageBean) {
            //跳转到用户信息页面
            XKitRouter.withKey(RouterConstant.PATH_USER_INFO_PAGE)
                    .withContext(view.getContext())
                    .withParam(RouterConstant.KEY_ACCOUNT_ID_KEY,
                            messageBean.getMessageData().getMessage().getFromAccount())
                    .navigate();
        }

        @Override
        public void onSelfIconClick(View view) {
            //跳转到个人信息页面
            XKitRouter.withKey(RouterConstant.PATH_MINE_INFO_PAGE)
                    .withContext(view.getContext())
                    .navigate();
        }

        @Override
        public void onUserIconLongClick(View view, ChatMessageBean messageBean) {
            //暂无实现
        }

        @Override
        public void onReEditRevokeMessage(View view, ChatMessageBean messageBean) {
            //点击撤回消息的编辑,只支持文本消息
            if (messageBean.getMessageData().getMessage().getMsgType() == MsgTypeEnum.text) {
                binding.chatView.getInputView()
                        .setReEditMessage(messageBean.getMessageData().getMessage().getContent());
            }
        }

        @Override
        public void onReplyMessageClick(View view, String messageUuid) {
            //点击回复消息,默认实现为滚动到被回复消息位置
            binding.chatView.getMessageListView().scrollToMessage(messageUuid);
        }

        @Override
        public void onSendFailBtnClick(View view, ChatMessageBean messageBean) {
            //发送失败图标点击,该实现为重新发送消息
            IMessageItemClickListener.super.onSendFailBtnClick(view, messageBean);
            viewModel.sendMessage(messageBean.getMessageData().getMessage(), true, true);
        }
    };

此文档是否对你有帮助?
有帮助
去反馈
  • 通过监听器监听
  • 监听器说明
  • 示例代码
  • 通过源码改动实现监听