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