融云自定义会话列表item

首先看官方文档https://docs.rongcloud.cn/v4/views/im/ui/guide/list/custom/android.html

嫌官方文档那就往下看,

我的需求是在item中添加一个标记(如图)

根据不同的集成方式

1:Maven 方式(implementation 'cn.rongcloud.sdk:im_lib:x.x.x'

需要去下载离线包IMKit和IMLib,在IMKit里layout中找到对应的布局 复制到我们的代码中,

rc_fr_conversationlist.xml(会话列表布局文件)直接在其中添加TextView控件

2:Module 方式(离线包)

此种集成方式 在IMKit里layout中找到对应的布局, 在其中改动  后续同上

代码如下

@ConversationProviderTag(conversationType = "private", portraitPosition = 1)
public class CustomPrivateConversationProvider extends PrivateConversationProvider {
    private ViewHolder holder;

    @Override
    public View newView(Context context, ViewGroup viewGroup) {
        // 此处更换为自定义布局文件
        View result = LayoutInflater.from(context).inflate(R.layout.item_private_conversation_provider, (ViewGroup)null);
        // 使用自定义 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.tv_source = result.findViewById(R.id.tv_source);
        result.setTag(holder);
        return result;
    }

    @Override
    public void bindView(View view, int position, UIConversation data) {
        super.bindView(view, position, data);
        //添加广场
        UserInfo userInfo =  RongUserInfoManager.getInstance().getUserInfo(data.getConversationTargetId());

        if (userInfo != null){
            String sign = SharedPUtils.getString(view.getContext(), userInfo.getUserId(), "无数据");
//            Tools.setShowLog("用户--->"+userInfo.getName());
//            Tools.setShowLog("标记--->"+sign);
//            Tools.setShowLog("userInfo.getExtra()--->"+userInfo.getExtra());
            if (!TextUtils.isEmpty(userInfo.getExtra())){
                holder.tv_source.setText(userInfo.getExtra());
                if (sign.equals("无数据")){//对方标记了我,而我还没标记对方时
                    SharedPUtils.putString(view.getContext(),userInfo.getUserId(),userInfo.getExtra());
                }
                setSource(userInfo,userInfo.getExtra());
            }else if (!sign.equals("无数据")){
                holder.tv_source.setText(sign);
                setSource(userInfo,sign);
            }else {
                holder.tv_source.setVisibility(View.GONE);
            }
        }
    }

    public void setSource(UserInfo userInfo,String Extra){
        switch (Extra){
            case "广场":
                holder.tv_source.setBackgroundResource(R.drawable.shape_chat_square);
                break;
            case "速配":
                holder.tv_source.setBackgroundResource(R.drawable.shape_chat_matching);
                break;
            case "推荐":
                holder.tv_source.setBackgroundResource(R.drawable.shape_chat_recommend);
                break;
        }
    }

    @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 {
        TextView tv_source;//来源   -广场等
    }

最后在Application中添加

RongIM.getInstance().registerConversationTemplate(new CustomPrivateConversationProvider());

会话列表中的item自定义就完成了

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值