expert-app/uikit/documents/定制通讯录.md
2025-11-18 15:25:59 +08:00

123 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 定制通讯录
在添加了通讯录的基础上,可以做相应的定制化操作。包括:通讯录列表点击事件响应处理,定制通讯录列表的功能项等。
## 设置通讯录列表点击事件响应处理
通讯录列表提供点击事件的响应处理函数,见 `ContactEventListener`
- 通讯录联系人项点击事件处理
- 通讯录联系人项长按事件处理,一般弹出菜单:移除好友、添加到星标好友等
- 联系人头像点击相应
```java
// 在Application初始化中设置
NimUIKit.setContactEventListener(new ContactEventListener() {
@Override
public void onItemClick(Context context, String account) {
// 进入个人资料页,开发者自行实现
UserProfileActivity.start(context, account);
}
@Override
public void onItemLongClick(Context context, String account) {
}
@Override
public void onAvatarClick(Context context, String account) {
// 进入个人资料页,开发者自行实现
UserProfileActivity.start(context, account);
}
});
```
## 定制通讯录列表功能项
定制通讯录列表功能项依靠 `ContactsCustomization` 实现,例如折叠群、黑名单、消息验证、我的电脑等。
首先定义功能项 `FuncItem`,示例:
```java
public final static class FuncItem extends AbsContactItem {
static final FuncItem NORMAL_TEAM = new FuncItem();
static final FuncItem BLACK_LIST = new FuncItem();
@Override
public int getItemType() {
return ItemTypes.FUNC;
}
@Override
public String belongsGroup() {
return null;
}
public static final class FuncViewHolder extends AbsContactViewHolder<FuncItem> {
private ImageView image;
private TextView funcName;
private TextView unreadNum;
@Override
public View inflate(LayoutInflater inflater) {
View view = inflater.inflate(R.layout.func_contacts_item, null);
this.image = (ImageView) view.findViewById(R.id.img_head);
this.funcName = (TextView) view.findViewById(R.id.tv_func_name);
this.unreadNum = (TextView) view.findViewById(R.id.tab_new_msg_label);
return view;
}
@Override
public void refresh(ContactDataAdapter contactAdapter, int position, FuncItem item) {
if (item == NORMAL_TEAM) {
funcName.setText("讨论组");
image.setImageResource(R.drawable.ic_secretary);
} else if (item == BLACK_LIST) {
funcName.setText("黑名单");
image.setImageResource(R.drawable.ic_black_list);
}
}
}
static List<AbsContactItem> provide() {
List<AbsContactItem> items = new ArrayList<AbsContactItem>();
items.add(NORMAL_TEAM);
items.add(BLACK_LIST);
return items;
}
static void handle(Context context, AbsContactItem item) {
if (item == NORMAL_TEAM) {
TeamListActivity.start(context, ItemTypes.TEAMS.NORMAL_TEAM);
} else if (item == BLACK_LIST) {
BlackListActivity.start(context);
}
}
}
```
然后添加功能项到 `ContactsCustomization`
```java
// 功能项定制
fragment.setContactsCustomization(new ContactsCustomization() {
@Override
public Class<? extends AbsContactViewHolder<? extends AbsContactItem>> onGetFuncViewHolderClass() {
return FuncItem.FuncViewHolder.class;
}
@Override
public List<AbsContactItem> onGetFuncItems() {
return FuncItem.provide();
}
@Override
public void onFuncItemClick(AbsContactItem item) {
FuncItem.handle(getActivity(), item);
}
});
```