通讯录界面事件监听

更新时间: 2024/03/15 18:25:48

IM UIKit 通讯录模块(ContactKit-ui)提供 IContactClickListener 监听器,监听通讯录表界面的点击事件,帮助您快速实现相应的跳转逻辑。您也可通过改动源码的的方式设置事件监听。

通过监听器监听

监听器说明

创建 IContactClickListener 监听器时可调用其内置方法,监听通讯录界面的点击事件。

  • 方法说明

    方法名称
    方法说明 参数说明
    onClick 监听通讯录界面的点击事件
    • BaseContactBean:通讯录 Item 数据,其子类包括ContactEntranceBeanContactFriendBean,分别代表下图中 相关功能模块 的数据和 好友列表 的好友数据。BaseContactBean详情参见下文的BaseContactBean 说明
    • position:被点击的通讯录 Item 在列表中的位置

    通讯录界面2.PNG

  • 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) {
        FriendInfo 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) -> {
                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();
            });
    
        }
    
    
  • 通讯录界面相关功能模块的点击实现逻辑都包含在ContactFragment中。如果需要修改点击事件和长按事件的监听配置,可直接修改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);
                }
            }
        }
    
    
此文档是否对你有帮助?
有帮助
去反馈
  • 通过监听器监听
  • 监听器说明
  • 示例代码
  • 通过源码改动实现监听