通讯录界面事件监听
更新时间: 2024/09/27 10:50:00
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
FriendInfo
好友信息。 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) {
// 从 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);
通过源码改动实现监听
-
通讯录列表好友单击实现逻辑都包含在
BaseContactFragment
中,如果需要修改单击事件和长按事件的监听,可以对loadDefaultContactAction()
方法的源码进行修改。Java
private void loadDefaultContactAction(ContactActions actions) { // 设置好友单击事件 actions.addContactListener(IViewTypeConstant.CONTACT_FRIEND, (position, data) -> { FriendInfo 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); } } }
此文档是否对你有帮助?