融云集成单聊与会话列表( 四 )


/*** 融云会话列表界面监听*/RongIM.getInstance().setConversationBehaviorListener(new MyConversationListBehaviorListener ());
通过这样设置后,针对在设置列表界面的不同操作可以进行不同的逻辑处理 。
13.会话界面操作监听
会话界面操作监听和会话列表界面相同,都是对该界面的操作进行处理,实现自己的功能 。
private class MyConversationClickListener implements RongIM.ConversationClickListener {/*** 当点击用户头像后执行 。** @param context上下文 。* @param conversationType 会话类型 。* @param user被点击的用户的信息 。* @param targetId会话 id* @return 如果用户自己处理了点击后的逻辑处理,则返回 true,否则返回 false,false 走融云默认处理方式 。*/@Overridepublic boolean onUserPortraitClick(Context context, Conversation.ConversationType conversationType, UserInfo user, String targetId) {return false;}/*** 当长按用户头像后执行 。** @param context上下文 。* @param conversationType 会话类型 。* @param user被点击的用户的信息 。* @param targetId会话 id* @return 如果用户自己处理了点击后的逻辑处理,则返回 true,否则返回 false,false 走融云默认处理方式 。*/@Overridepublic boolean onUserPortraitLongClick(Context context, Conversation.ConversationType conversationType, UserInfo user, String targetId) {return false;}/*** 当点击消息时执行 。** @param context 上下文 。* @param view触发点击的 View 。* @param message 被点击的消息的实体信息 。* @return 如果用户自己处理了点击后的逻辑处理,则返回 true,否则返回 false, false 走融云默认处理方式 。*/@Overridepublic boolean onMessageClick(Context context, View view, Message message) {return false;}/*** 当点击链接消息时执行 。** @param context 上下文 。* @param link被点击的链接 。* @param message 被点击的消息的实体信息* @return 如果用户自己处理了点击后的逻辑处理,则返回 true,否则返回 false, false 走融云默认处理方式 。*/@Overridepublic boolean onMessageLinkClick(Context context, String link, Message message) {return false;}/*** 当长按消息时执行 。** @param context 上下文 。* @param view触发点击的 View 。* @param message 被长按的消息的实体信息 。* @return 如果用户自己处理了长按后的逻辑处理,则返回 true,否则返回 false,false 走融云默认处理方式 。*/@Overridepublic boolean onMessageLongClick(Context context, View view, Message message) {return false;}}
/*** 融云会话界面监听*/RongIM.getInstance().setConversationClickListener(new MyConversationClickListener(this));
通过这样设置后,针对在设置列表界面的不同操作可以进行不同的逻辑处理 。
14.会话中历史消息头像更新
在本地更新头像后,我们一般会来更新本地内存中保存的用户信息,但是当我们进入单个会话后会发现,历史消息中的头像并没有更新 。
上面我们提过的,当你的用户信息选择第二种方式的时候出现的坑,这就是坑啊 。
上面用户信息的部分说过了,选择第二种方式,那么在发送消息的时候会携带用户信息,这时候显示的头像是A,然后更新头像为B后,发送消息,携带的头像是B,单个消息看,是没有问题的,每个消息都显示了正确的头像,但是整体来看,历史消息中应该显示最新的头像,这就是问题 。
知道来源后,我们就要着手解决这个问题了,融云API中提供了获取历史消息的接口
public void getHistoryMessages(ConversationType conversationType, String targetId, int oldestMessageId,int count,ResultCallback> callback) {RongIMClient.getInstance().getHistoryMessages(conversationType, targetId, oldestMessageId, count, callback);}