通讯录界面事件监听
更新时间: 2024/07/26 13:39:23
IM UIKit 通讯录模块(ContactKit-ui
)提供 IContactClickListener
监听器,监听通讯录表界面的点击事件,帮助您快速实现相应的跳转逻辑。您也可通过改动源码的的方式设置事件监听。
通过监听器监听
监听器说明
创建 IContactClickListener
监听器时可调用其内置方法,监听通讯录界面的点击事件。
-
方法说明
方法名称方法说明 参数说明 onClick
监听通讯录界面的点击事件 BaseContactBean
:通讯录 Item 数据,其子类包括ContactEntranceBean
和ContactFriendBean
,分别代表下图中 相关功能模块 的数据和 好友列表 的好友数据。BaseContactBean
详情参见下文的BaseContactBean 说明。position
:被点击的通讯录 Item 在列表中的位置
-
BaseContactBean 说明
BaseContactBean
为通讯录数据实体基类,其成员参数见下表。参数 类型 说明 viewType
int 通讯录界面中有两种 View 类型,分别是 IViewTypeConstant.CONTACT_ACTION_ENTER
:头部二级界面入口,即上图中的验证消息、黑名单和我的群聊。IViewTypeConstant.CONTACT_FRIEND
:好友
router
String 跳转路由地址,默认实现中会拼装该数据 RouterConstant.PATH_MY_NOTIFICATION_PAGE
:系统通知的路由跳转地址RouterConstant.PATH_MY_BLACK_PAGE
:黑名单的跳转路由地址RouterConstant.PATH_MY_TEAM_PAGE
:我的群聊的路由跳转地址
-
ContactEntranceBean
为通讯录数据实体类,继承BaseContactBean
,其成员参数见下表。参数类型 说明 icon
int 图标资源 ID number
int 新消息的未读数 showRightArrow
boolean 是否显示箭头图标 >
。默认为true
,即显示该箭头图标title
String 显示文案 -
ContactFriendBean
为通讯录好友数据实体类,继承BaseContactBean
,其成员参数见下表。参数类型 说明 data
UserWithFriend
好友信息 isSelected
boolean 是否被选中
-
点击事件说明
-
传入的点击事件类型为
SparseArray<IContactSelectorListener>
。 -
由于通讯录列表中包含多种数据类型,您需要按照数据类型设置相应的点击事件。
数据类型 点击事件类型 ContactEntranceBean
IViewTypeConstant.CONTACT_ACTION_ENTER
ContactFriendBean
IViewTypeConstant.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()
方法的源码进行修改。java
private 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
方法的源码。java
private 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); } } }
此文档是否对你有帮助?