会话列表界面事件监听
更新时间: 2024/09/27 10:50:00
IM UIKit 会话列表模块(convesationkit-ui
)提供会话列表监听器ItemClickListener
监听会话列表界面的点击事件和长按事件,帮助您快速实现相应的跳转逻辑。您也可通过改动源码的的方式设置事件监听。
通过监听器监听
监听器说明
创建ItemClickListener
时可调用其内置方法,分别监听点击事件和长按事件。
如果需要对监听器做自定义开发,可按需选择监听器的内置方法进行重写,自行实现界面跳转逻辑。不需要全部重写的内置方法,IM UIKit 会在执行它们默认的实现逻辑的基础上执行您自行实现的逻辑。例如,假设您在 IM UIKit 默认界面跳转逻辑的基础上实现了跳转前的数据埋点,那么 IM UIKit 将既执行您的数据埋点逻辑,也执行其自身的默认跳转逻辑。全部重写的内置方法,如果按照您的自定义逻辑返回true
,那么 IM UIKit 将不再执行这些内置方法中默认实现的界面逻辑,返回false
则既执行您的自定义逻辑,也执行默认实现的逻辑。
- 方法说明
方法名称 |
方法说明 | 参数说明 |
---|---|---|
onClick |
监听会话列表和会话项 的点击事件
|
onClick 的参数如下
|
onLongClick |
监听会话列表和会话项 的长按事件
|
onLongClick 的参数说明如下
|
onAvatarClick |
监听会话列表和会话项中头像 的点击事件
|
onAvatarClick 的参数说明如下
|
onAvatarLongClick |
监听会话列表和会话项中头像 的长按事件
|
onAvatarLongClick 的参数说明如下
|
下图中红框所示的单个会话界面区域即为一个会话项。
- ConversationBean 说明
ConversationBean
为会话数据实体类,其成员参数见下表。
参数 |
类型 |
说明 |
---|---|---|
viewType |
int | View 类型,在会话列表中有两种类型分别是
|
router |
String | 会话的跳转路由地址,默认实现中会拼装该数据
|
paramKey |
String | 需要传递参数的 Key 值,参数以 Map 的形式传递。在会话列表中,该值为RouterConstant.CHAT_KRY |
param |
Object | 需要传递参数的 value 值,参数以 Map 的形式传递。在会话列表中,
|
示例代码
通过监听器实现界面点击事件监听的示例代码如下:
java//1、实现点击事件
ConversationUIConfig config = new ConversationUIConfig();
config.itemClickListener = new ItemClickListener() {
@Override
public boolean onClick(Context context, ConversationBean data, int position) {
//可以参考默认实现,默认实现是跳转到聊天页面
//XKitRouter.withKey(data.router).withParam(data.paramKey, data.param).withContext(context).navigate();
return true;
}
@Override
public boolean onLongClick(Context context, ConversationBean data, int position) {
//添加您的代码逻辑,如果需要继续执行默认逻辑则返回false,否则返回true
return true;
}
};
//2、将自定义事件设置到ConversationKitClient即可
ConversationKitClient.setConversationUIConfig(config);
通过源码改动实现监听
会话列表的实现逻辑都包含在ConversationFragment
中,如果需要修改点击事件和长按事件的监听,可以对initView()
方法的源码进行修改。
java private void initView() {
//设置会话排序Comparator,默认按照置顶和时间优先级进行排序
viewBinding.conversationView.setComparator(conversationComparator);
viewBinding.conversationView.setItemClickListener(new ViewHolderClickListener() {
@Override
public boolean onClick(BaseBean data, int position) {
//会话列表Item点击事件的实现,优先调用ConversationUIConfig,为空则采用默认实现
if (ConversationKitClient.getConversationUIConfig() != null &&
ConversationKitClient.getConversationUIConfig().itemClickListener != null
&& data instanceof ConversationBean) {
ConversationKitClient.getConversationUIConfig().itemClickListener.onClick(ConversationFragment.this.getContext(), (ConversationBean) data, position);
} else {
XKitRouter.withKey(data.router).withParam(data.paramKey, data.param).withContext(ConversationFragment.this.getContext()).navigate();
}
return true;
}
@Override
public boolean onLongClick(BaseBean data, int position) {
//会话列表Item长按事件的实现,优先调用ConversationUIConfig,为空则采用默认实现
if (ConversationKitClient.getConversationUIConfig() != null &&
ConversationKitClient.getConversationUIConfig().itemClickListener != null
&& data instanceof ConversationBean) {
return ConversationKitClient.getConversationUIConfig().itemClickListener.onLongClick(ConversationFragment.this.getContext(), (ConversationBean) data, position);
} else {
showStickDialog(data);
return true;
}
}
});
// TitleBar 右侧加号点击事件
viewBinding.conversationTitleBar.setRightImageClick(v -> {
if (ConversationKitClient.getConversationUIConfig() != null
&& ConversationKitClient.getConversationUIConfig().titleBarRightClick != null){
ConversationKitClient.getConversationUIConfig().titleBarRightClick.onClick(v);
return;
}
Context context = getContext();
ContentListPopView contentListPopView = new ContentListPopView.Builder(context)
.addItem(PopItemFactory.getAddFriendItem(context))
.addItem(PopItemFactory.getCreateGroupTeamItem(context))
.addItem(PopItemFactory.getCreateAdvancedTeamItem(context))
.build();
contentListPopView.showAsDropDown(v, ScreenUtil.dip2px(-105), 0);
});
// TitleBar 右侧第二个加号点击事件
viewBinding.conversationTitleBar.setRight2ImageClick(v -> {
if (ConversationKitClient.getConversationUIConfig() != null
&& ConversationKitClient.getConversationUIConfig().titleBarRight2Click != null){
ConversationKitClient.getConversationUIConfig().titleBarRight2Click.onClick(v);
return;
}
XKitRouter.withKey(RouterConstant.PATH_GLOBAL_SEARCH_PAGE).withContext(getContext()).navigate();
});
}
此文档是否对你有帮助?