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.

123 lines
3.7 KiB

2 years ago
# 定制通讯录
在添加了通讯录的基础上,可以做相应的定制化操作。包括:通讯录列表点击事件响应处理,定制通讯录列表的功能项等。
## 设置通讯录列表点击事件响应处理
通讯录列表提供点击事件的响应处理函数,见 `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);
}
});
```