IM 即时通讯 (442)
Android (209)
- 初始化&链接 (8)
- 事件&监听处理 (7)
- 用户信息 (13)
- 会话列表 (16)
- 聊天会话 (26)
- 消息处理 (35)
- 自定义消息 (6)
- 音视频 (2)
- 推送&通知 (34)
- 扩展功能 (4)
- 第三方地图 (3)
- 依赖&配置 (9)
- 升级说明 (3)
- 其他 (43)
iOS (168)
- SDK 导入 (10)
- 连接 (8)
- 事件处理 (2)
- 用户信息 (3)
- 会话列表 (14)
- 聊天会话 (44)
- 消息处理 (26)
- 自定义消息 (8)
- 推送&通知 (19)
- 扩展功能 (5)
- 国际化 (4)
- 音视频 (3)
- 其他 (22)
Web (36)
Server (29)
自定义会话列表 Item
主要针对在原有会话类型布局基础上添加布局
发布时间: 2018-04-09 10:51
回答:
这里以 Private 类型的会话为例:
1.在原有布局基础上改变控件位置
Private 类型的会话列表显示对应的类为 PrivateConversationProvider,对应的布局文件为 rc_item_base_conversation.xml,可以在 IMKit Module 下找到,如果想修改 Private 会话列表 Item 样式,可直接修改该布局文件。另可参考:http://www.rongcloud.cn/docs/android.html#ui_customize_conversation_list
2.在原有布局基础上添加自定义布局
新建资源文件 item_private_conversation_provider_custom.xml,复制 rc_item_base_conversation.xml 文件中的布局代码至新建文件中,然后添加自己的布局(注意不要删除原有布局),比如增加了一个 id 为 custom 的自定义布局。
新建一个类继承 PrivateConversationProvider
@ConversationProviderTag(conversationType = "private", portraitPosition = 2) public class CustomPrivateConversationProvider extends PrivateConversationProvider { @Override public View newView(Context context, ViewGroup viewGroup) { // 此处更换为自定义布局文件 View result = LayoutInflater.from(context).inflate(R.layout.item_private_conversation_provider, (ViewGroup)null); // 使用自定义 ViewHolder ViewHolder holder = new ViewHolder(); // ===> 此部分内容直接复制即可 holder.title = (TextView)result.findViewById(io.rong.imkit.R.id.rc_conversation_title); holder.time = (TextView)result.findViewById(io.rong.imkit.R.id.rc_conversation_time); holder.content = (TextView)result.findViewById(io.rong.imkit.R.id.rc_conversation_content); holder.notificationBlockImage = (ImageView)result.findViewById(io.rong.imkit.R.id.rc_conversation_msg_block); holder.readStatus = (ImageView)result.findViewById(io.rong.imkit.R.id.rc_conversation_status); // <===| // 获取自定义 View holder.customView = result.findViewById(R.id.custom); result.setTag(holder); return result; } @Override public void bindView(View view, int position, UIConversation data) { super.bindView(view, position, data); } @Override public Spannable getSummary(UIConversation data) { return super.getSummary(data); } @Override public String getTitle(String userId) { return super.getTitle(userId); } @Override public Uri getPortraitUri(String userId) { return super.getPortraitUri(userId); } // 自定义 ViewHolder,可添加自定义布局控件 class ViewHolder extends PrivateConversationProvider.ViewHolder { View customView; } }
在 Application 的 onCreate 方法中注册
RongIM.getInstance().registerConversationTemplate(new CustomPrivateConversationProvider());
如果想在点击会话列表中此类型会话 Item 时执行一些操作(自定义布局可以通过 View.findViewById() 来获取)可以设置监听事件:
RongIM.setConversationListBehaviorListener(new RongIM.ConversationListBehaviorListener() { @Override public boolean onConversationPortraitClick(Context context, Conversation.ConversationType conversationType, String s) { return false; } @Override public boolean onConversationPortraitLongClick(Context context, Conversation.ConversationType conversationType, String s) { return false; } @Override public boolean onConversationLongClick(Context context, View view, UIConversation uiConversation) { return false; } @Override public boolean onConversationClick(Context context, View view, UIConversation uiConversation) { return false; } });