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

来源:互联网 发布:淘宝访客进店提醒 编辑:程序博客网 时间: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写好了,加头就很简单了;