# 融云 集成会话列表加头布局
来源:互联网 发布:淘宝访客进店提醒 编辑:程序博客网 时间:2024/06/06 04:56
- 这个是在用IMKit的时候会出现的问题,因为布局什么的都是第三方的,那么怎么解决呢?要么改成IMLib,要么就用混合的。我是用的混合集成的。
- 注意只重写Adpater并不能实现,ConversationListFragment是可以设置Adapter,但是继承ConversationListAdapter添加头会失败,因为官方已经封装好了的,涉及的东西较多,是无法添加成功的。所以不要偷懒,直接重写布局要来的更方便一些;
原理是自己写会话列表布局,那么需要的东西有哪些呢:
- 首先我们要拿到会话列表集合
RongIM.getInstance().getConversationList(); 怎么显示会话列表内容区域(这个尽量去看源码吧,不看的话也可以看我写的代码)
RoundedImageView avater = holder.getView(R.id.item_message_system_avatar);TextView title = holder.getView(R.id.item_message_system_title);TextView detail = holder.getView(R.id.item_message_system_detail);TextView time = holder.getView(R.id.item_message_system_time);TextView count = holder.getView(R.id.item_message_system_count);UIConversation data = UIConversation.obtain(conversation, false);ProviderTag tag = null;if (data == null){ title.setText(null); time.setText(null); detail.setText(null);}else{ String name = null; Uri avaterUri = null; Contacts contacts = mDao.queryContactByAccount(data.getConversationTargetId().replace("E", "")); if (contacts != null) { name = contacts.getUname(); avaterUri = Uri.parse(contacts.getAvatar()); UiUtils.setPicture(UiUtils.getContext(), avater, avaterUri.toString()); } else { **//这里这样获取昵称和头像是因为数据库没有陌生人的信息,而又要求显示陌生人的头像和昵称,那么就需要设置(RongIM.getInstance().setCurrentUserInfo(info);RongIM.getInstance().setMessageAttachedUserInfo(true);)这两个属性;** MessageContent message = conversation.getLatestMessage(); UserInfo userInfo = message.getUserInfo(); name = userInfo.getName(); avaterUri = userInfo.getPortraitUri(); } if (avaterUri == null) avater.setImageResource(R.drawable.default_avatar_icon); else UiUtils.setPicture(mContext, avater, avaterUri.toString()); **//这一句是用来格式化时间的** String str = RongDateUtils.getConversationListFormatDate(data.getUIConversationTime(), UiUtils.getContext()); time.setText(str); //设置未读消息数 int unreadCount = RongIMClient.getInstance().getUnreadCount( Conversation.ConversationType.PRIVATE, data.getConversationTargetId()); if (unreadCount > 0) { if (unreadCount > 99) { count.setText(this.mContext.getResources().getString( io.rong.imkit.R.string.rc_message_unread_count)); } else { count.setText(Integer.toString(unreadCount)); } count.setVisibility(View.VISIBLE); } else { count.setVisibility(View.GONE); } **//设置消息内容显示,这段内容是显示内容的,建议直接用这段段代码,或者自己去抄源码,不要自己写,因为会有很多不完善,例如表情的显示,草稿等;** if (!mIsQuery) { if (TextUtils.isEmpty(data.getDraft()) && !data.getMentionedFlag()) { detail.setText(data.getConversationContent()); } else { SpannableStringBuilder key = new SpannableStringBuilder(); SpannableString status; if (data.getMentionedFlag()) { status = new SpannableString(UiUtils.getContext().getString( io.rong.imkit.R.string.rc_message_content_mentioned)); status.setSpan(new ForegroundColorSpan( UiUtils.getContext().getResources().getColor( io.rong.imkit.R.color.rc_mentioned_color)), 0, status.length(), 33); key.append(status).append(" ").append(data.getConversationContent()); } else { status = new SpannableString(UiUtils.getContext().getString( io.rong.imkit.R.string.rc_message_content_draft)); status.setSpan(new ForegroundColorSpan( UiUtils.getContext().getResources().getColor( io.rong.imkit.R.color.rc_draft_color)), 0, status.length(), 33); key.append(status).append(" ").append(data.getDraft()); } AndroidEmoji.ensure(key); detail.setText(key); } } else { String content = data.getConversationContent().toString(); SpannableString ss = new SpannableString(content); int i = 0; while ((i = content.indexOf(keyWords, i)) != -1) { content = content.substring(i, content.length()); ss.setSpan(new ForegroundColorSpan( UiUtils.getResources().getColor(R.color.colorFFFF4E4E)), i, i + keyWords.length(), SPAN_INCLUSIVE_INCLUSIVE); i = i + keyWords.length(); } AndroidEmoji.ensure(ss); detail.setText(ss); } if (RongContext.getInstance() != null && data.getMessageContent() != null) { tag = RongContext.getInstance() .getMessageProviderTag(data.getMessageContent().getClass()); } if (data.getSentStatus() != null && (data.getSentStatus() == Message.SentStatus.FAILED || data.getSentStatus() == Message.SentStatus.SENDING) && tag != null && tag.showWarning() && data.getConversationSenderId() != null && data.getConversationSenderId().equals(RongIM.getInstance().getCurrentUserId())) { Bitmap key2 = BitmapFactory.decodeResource(UiUtils.getContext().getResources(), io.rong.imkit.R.drawable.rc_conversation_list_msg_send_failure); int status1 = key2.getWidth(); Drawable drawable = null; if (data.getSentStatus() == Message.SentStatus.FAILED && TextUtils.isEmpty(data.getDraft())) { drawable = UiUtils.getContext() .getResources() .getDrawable( R.drawable.rc_conversation_list_msg_send_failure); } else if (data.getSentStatus() == Message.SentStatus.SENDING && TextUtils.isEmpty(data.getDraft())) { drawable = UiUtils.getContext() .getResources() .getDrawable(R.drawable.rc_conversation_list_msg_sending); } if (drawable != null) { drawable.setBounds(0, 0, status1, status1); detail.setCompoundDrawablePadding(10); detail.setCompoundDrawables(drawable, null, null, null); } } else { detail.setCompoundDrawables(null, null, null, null); }}
- 首先我们要拿到会话列表集合
- Adapter写好了,加头就很简单了;
阅读全文
0 0
- # 融云 集成会话列表加头布局
- 融云集成4--会话列表,会话界面的集成
- 356_实现头布局加ViewPager
- XListView加头布局ViewPager轮播
- 二级列表自定义加减号布局
- iOS 环信集成(五) 加载会话列表
- ListView加一个头布局–下拉刷新思路
- android 项目学习随笔九(ListView加头布局)
- div-css布局:新闻列表过长溢出加…方法
- XRecyclerView如此so easy实现下拉刷新,上拉加载,添加头布局(头布局任意加)
- 头布局
- VIM会话-窗口布局
- 融云 解决用户头像会话列表不显示问题
- FILE_GET_CONTENTS 加数据头
- S5PV210加文件头
- RecyclerView加头
- Android 获取短信会话列表
- Android 获取短信会话列表
- opencv(一):Directory(遍历目录下的文件(夹))
- vxWorks系统中多核cpu的使能
- mysql半同步复制
- 分布式项目运用-Dubbo配置
- 利用反射实现mysql数据库sql查询 返回List<E>泛型(持久化)对象
- # 融云 集成会话列表加头布局
- spring jsp table 获取单个input字段值并传到后台 成功简例
- 【设计模式】Java设计模式之模板方法模式
- Python 包
- RxJava2 / RxAndroid2操作符take
- github回滚到指定版本
- request.getParameter() request.getInputStream() request.getReader()
- 前端技术总结(包/资源/加载器/测试/框架)
- iOS开发const,static,extern,#define的使用