通讯录界面事件监听
更新时间: 2025/09/11 14:15:56
IM UIKit 通讯录模块(ContactKit-ui)提供 IContactClickListener 监听器,监听通讯录表界面的点击事件,帮助您快速实现相应的跳转逻辑。您也可通过改动源码的的方式设置事件监听。
通过监听器监听
监听器说明
创建 IContactClickListener 监听器时可调用其内置方法,监听通讯录界面的点击事件。
-
方法说明
方法名称方法说明 参数说明 onClick监听通讯录界面的点击事件 BaseContactBean:通讯录 Item 数据,其子类包括ContactEntranceBean和ContactFriendBean,分别代表下图中 相关功能模块 的数据和 好友列表 的好友数据。BaseContactBean详情参见下文的BaseContactBean 说明。position:被点击的通讯录 Item 在列表中的位置
-
BaseContactBean 说明
BaseContactBean为通讯录数据实体基类,其成员参数见下表。参数 类型 说明 viewTypeint 通讯录界面中有两种 View 类型,分别是 IViewTypeConstant.CONTACT_ACTION_ENTER:头部二级界面入口,即上图中的验证消息、黑名单和我的群聊。IViewTypeConstant.CONTACT_FRIEND:好友
routerString 跳转路由地址,默认实现中会拼装该数据 RouterConstant.PATH_MY_NOTIFICATION_PAGE:系统通知的路由跳转地址RouterConstant.PATH_MY_BLACK_PAGE:黑名单的跳转路由地址RouterConstant.PATH_MY_TEAM_PAGE:我的群聊的路由跳转地址
-
ContactEntranceBean为通讯录数据实体类,继承BaseContactBean,其成员参数见下表。参数类型 说明 iconint 图标资源 ID numberint 新消息的未读数 showRightArrowboolean 是否显示箭头图标 >。默认为true,即显示该箭头图标titleString 显示文案 -
ContactFriendBean为通讯录好友数据实体类,继承BaseContactBean,其成员参数见下表。参数类型 说明 dataUserWithFriend好友信息 isSelectedboolean 是否被选中
-
点击事件说明
-
传入的点击事件类型为
SparseArray<IContactSelectorListener>。 -
由于通讯录列表中包含多种数据类型,您需要按照数据类型设置相应的点击事件。
数据类型 点击事件类型 ContactEntranceBeanIViewTypeConstant.CONTACT_ACTION_ENTERContactFriendBeanIViewTypeConstant.CONTACT_FRIEND
-
示例代码
java//1、实现点击事件
ContactUIConfig contactUIConfig = new ContactUIConfig();
contactUIConfig.itemClickListeners = new SparseArray<>();
//设置通讯录头部验证消息、黑名单和我的群聊的点击事件
contactUIConfig.itemClickListeners.put(IViewTypeConstant.CONTACT_ACTION_ENTER, new IContactClickListener() {
@Override
public void onClick(int position, BaseContactBean data) {
//默认实现,跳转到相关界面
XKitRouter.withKey(data.router).withContext(context).navigate();
}
});
//设置通讯录好友点击事件点击事件
contactUIConfig.itemClickListeners.put(IViewTypeConstant.CONTACT_FRIEND, new IContactClickListener() {
@Override
public void onClick(int position, BaseContactBean data) {
UserWithFriend friendInfo = ((ContactFriendBean) data).data;
//跳转到用户信息页
XKitRouter.withKey(RouterConstant.PATH_USER_INFO_PAGE).withParam(RouterConstant.KEY_ACCOUNT_ID_KEY, friendInfo.getAccount()).withContext(context).navigate();
}
});
//2、将自定义事件设置到ContactKitClient即可
ContactKitClient.setContactUIConfig(contactUIConfig);
通过源码改动实现监听
-
通讯录列表好友点击实现逻辑都包含在
ContactFragment中,如果需要修改点击事件和长按事件的监听,可以对loadDefaultContactAction()方法的源码进行修改。javaprivate void loadDefaultContactAction(ContactActions actions) { // 设置好友点击事件 actions.addContactListener(IViewTypeConstant.CONTACT_FRIEND, (position, data) -> { UserWithFriend friendInfo = ((ContactFriendBean) data).data; XKitRouter.withKey(RouterConstant.PATH_USER_INFO_PAGE).withParam(RouterConstant.KEY_ACCOUNT_ID_KEY, friendInfo.getAccount()).withContext(ContactFragment.this.getContext()).navigate(); }); } -
通讯录界面相关功能模块的点击实现逻辑都包含在
BaseContactFragment中。如果需要修改点击事件和长按事件的监听配置,可直接修改loadHeader方法的源码。javaprivate void loadHeader(ContactActions actions) { if (contactConfig.showHeader) { if (contactConfig.headerData == null) { //获取头部功能入口的数据 List<ContactEntranceBean> entranceBeanList = viewModel.getContactEntranceList(this.requireContext()); for (ContactEntranceBean bean : entranceBeanList) { viewBinding.contactListview.addContactData(bean); } //监听头部数据变化,用户验证消息的未读数变化 viewModel.getContactEntranceLiveData().observe(getViewLifecycleOwner(), contactEntranceBean -> { if (contactCallback != null) { contactCallback.updateUnreadCount(contactEntranceBean.number); } viewBinding.contactListview.updateContactData(contactEntranceBean); }); //头部数据点击事件 actions.addContactListener(IViewTypeConstant.CONTACT_ACTION_ENTER, (position, data) -> { if (!TextUtils.isEmpty(data.router)) { XKitRouter.withKey(data.router).withContext(ContactFragment.this.getContext()).navigate(); } }); } else { viewBinding.contactListview.addContactData(contactConfig.headerData); } } }
此文档是否对你有帮助?





