# 融云 集成会话列表加头布局

  • 这个是在用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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值