通讯录界面事件监听

更新时间: 2024/09/27 10:50:00

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) {
          // 从 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() 方法的源码进行修改。

    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();
            });
    
        }
    
    
  • 通讯录界面相关功能模块的单击实现逻辑都包含在 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);
                }
            }
        }
    
此文档是否对你有帮助?
有帮助
去反馈
  • 通过监听器监听
  • 监听器说明
  • 示例代码
  • 通过源码改动实现监听