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
123 lines
3.7 KiB
3 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);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
```
|
||
|
|