- 這個是在用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寫好了,加頭就很簡單了;
# 融雲 集成會話列表加頭佈局
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.