You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
4.2 KiB
104 lines
4.2 KiB
2 years ago
|
# 定制最近联系人列表
|
||
|
|
||
|
RecentContactsFragment 实现了默认的列表点击事件处理,点击列表项将会直接跳转至默认的单聊或者群聊界面,若默认实现无法满足需求,开发者可以参照下文定制最近联系人列表来实现,详细可以参照云信 Demo。
|
||
|
|
||
|
## 界面布局
|
||
|
|
||
|
最近联系人的布局属性如下图所示:
|
||
|
|
||
|
![image](https://github.com/netease-im/NIM_Resources/blob/master/Android/Images/recent.png)
|
||
|
|
||
|
|属性|说明|
|
||
|
|:---|:---|
|
||
|
|network_status_bar|网络状态背景条|
|
||
|
|status_desc_label|网络状态文字说明|
|
||
|
|img_head|头像|
|
||
|
|tv_nickname|昵称|
|
||
|
|tv_online_state|在线状态|
|
||
|
|tv_message|消息内容|
|
||
|
|tv_date_time|时间戳|
|
||
|
|img_msg_status|消息发送状态|
|
||
|
|unread_number_tip|未读红点,占坑用|
|
||
|
|unread_number_explosion|未读红点,全屏动画时使用|
|
||
|
|
||
|
## 深度定制
|
||
|
|
||
|
开发者也可以通过设置自定义事件回调函数 RecentContactsCallback 来定制,目前支持:
|
||
|
|
||
|
1\. 最近联系人列表数据加载完成的回调函数(默认不作处理)。
|
||
|
|
||
|
2\. 有未读数更新时的回调函数,供更新除最近联系人列表外的其他界面和未读指示(默认不作处理)。
|
||
|
|
||
|
3\. 最近联系人点击响应回调函数,以供打开会话窗口时传入定制化参数,或者做其他动作(默认跳转至聊天窗口)。
|
||
|
|
||
|
4\. 设置自定义消息的摘要消息,展示在最近联系人列表的消息缩略栏上。当然,你也可以自定义一些内建消息的缩略语,例如图片,语音,音视频会话等,自定义的缩略语会被优先使用。
|
||
|
|
||
|
5\. 设置Tip消息的摘要信息,展示在最近联系人列表的消息缩略栏上。
|
||
|
|
||
|
如下是云信 Demo对最近联系人列表的定制:
|
||
|
|
||
|
```java
|
||
|
// 设置自定义事件回调函数
|
||
|
contactsFragment.setCallback(new RecentContactsCallback() {
|
||
|
@Override
|
||
|
public void onRecentContactsLoaded() {
|
||
|
// 最近联系人列表加载完毕
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void onUnreadCountChange(int unreadCount) {
|
||
|
// 未读数发生变化
|
||
|
ReminderManager.getInstance().updateSessionUnreadNum(unreadCount);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void onItemClick(RecentContact recent) {
|
||
|
// 回调函数,以供打开会话窗口时传入定制化参数,或者做其他动作
|
||
|
switch (recent.getSessionType()) {
|
||
|
case P2P:
|
||
|
SessionHelper.startP2PSession(getActivity(), recent.getContactId());
|
||
|
break;
|
||
|
case Team:
|
||
|
SessionHelper.startTeamSession(getActivity(), recent.getContactId());
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public String getDigestOfAttachment(MsgAttachment attachment) {
|
||
|
// 设置自定义消息的摘要消息,展示在最近联系人列表的消息缩略栏上
|
||
|
// 当然,你也可以自定义一些内建消息的缩略语,例如图片,语音,音视频会话等,自定义的缩略语会被优先使用。
|
||
|
if (attachment instanceof GuessAttachment) {
|
||
|
GuessAttachment guess = (GuessAttachment) attachment;
|
||
|
return guess.getValue().getDesc();
|
||
|
} else if (attachment instanceof RTSAttachment) {
|
||
|
RTSAttachment rts = (RTSAttachment) attachment;
|
||
|
return rts.getContent();
|
||
|
} else if (attachment instanceof StickerAttachment) {
|
||
|
return "[贴图]";
|
||
|
} else if (attachment instanceof SnapChatAttachment) {
|
||
|
return "[阅后即焚]";
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public String getDigestOfTipMsg(RecentContact recent) {
|
||
|
// 设置Tip消息的摘要信息,展示在最近联系人列表的消息缩略栏上
|
||
|
String msgId = recent.getRecentMessageId();
|
||
|
List<String> uuids = new ArrayList<>(1);
|
||
|
uuids.add(msgId);
|
||
|
List<IMMessage> msgs = NIMClient.getService(MsgService.class).queryMessageListByUuidBlock(uuids);
|
||
|
if (msgs != null && !msgs.isEmpty()) {
|
||
|
IMMessage msg = msgs.get(0);
|
||
|
Map<String, Object> content = msg.getRemoteExtension();
|
||
|
if (content != null && !content.isEmpty()) {
|
||
|
return (String) content.get("content");
|
||
|
}
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
});
|
||
|
```
|