最终的实现效果:

用户进入房间

    public void insertItem(UserBean userBean) {if (userBean == null) {return;}int position = findItemPosition(userBean.getId());if (position >= 0) {return;}int size = dataList.size();dataList.add(userBean);notifyItemInserted(size);}

用户离开房间

public void removeItem(String uid) {if (TextUtils.isEmpty(uid)) {return;}int position = findItemPosition(uid);if (position >= 0) {dataList.remove(position);notifyItemRemoved(position);notifyItemRangeChanged(position, dataList.size(), "payload");}}

添加僵尸粉

  public void insertList(List<UserBean> list) {if (dataList != null && list != null && list.size() > 0) {int position = dataList.size();dataList.addAll(list);notifyItemRangeInserted(position, dataList.size());}}

更新用户信息(更新用户3的姓名为刘德华)

    public void updateUserInfo(String uid, String name) {if (!TextUtils.isEmpty(uid)) {for (int i = 0, size = dataList.size(); i < size; i++) {UserBean bean = dataList.get(i);if (uid.equals(bean.getId())) {if (bean.getName() != name) {bean.setName(name);notifyItemChanged(i, "payload");}break;}}}}

完整的核心代码:

public class LiveUserAdapter extends RecyclerView.Adapter {private Context context;private List<UserBean> dataList;private LayoutInflater mInflater;private OnItemClickListener mOnItemClickListener;public LiveUserAdapter(Context context) {this.context = context;this.dataList = new ArrayList<>();mInflater = LayoutInflater.from(context);}@NonNull@Overridepublic RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View itemView = mInflater.inflate(R.layout.item_live_user, parent, false);itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Object tag = v.getTag();if (tag != null) {int position = (int) tag;if (mOnItemClickListener != null) {mOnItemClickListener.onItemClick(dataList.get(position), position);}}}});return new UserViewHolder(itemView);}@Overridepublic void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {UserViewHolder viewHolder = (UserViewHolder) holder;viewHolder.setData(dataList.get(position), position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic int getItemCount() {return dataList.size();}public void setOnItemClickListener(OnItemClickListener onItemClickListener) {mOnItemClickListener = onItemClickListener;}public interface OnItemClickListener {void onItemClick(UserBean bean, int position);}private class UserViewHolder extends RecyclerView.ViewHolder {ImageView headView;public UserViewHolder(View itemView) {super(itemView);headView = itemView.findViewById(R.id.headview);}public void setData(UserBean userBean, int position) {itemView.setTag(position);headView.setImageResource(userBean.getAvatar());}}public void refreshList(List<UserBean> list) {if (dataList != null && list != null && list.size() > 0) {dataList.clear();dataList.addAll(list);notifyDataSetChanged();}}private int findItemPosition(String uid) {if (!TextUtils.isEmpty(uid)) {for (int i = 0, size = dataList.size(); i < size; i++) {if (uid.equals(dataList.get(i).getId())) {return i;}}}return -1;}public void removeItem(String uid) {if (TextUtils.isEmpty(uid)) {return;}int position = findItemPosition(uid);if (position >= 0) {dataList.remove(position);notifyItemRemoved(position);notifyItemRangeChanged(position, dataList.size(), "payload");}}public void insertItem(UserBean userBean) {if (userBean == null) {return;}int position = findItemPosition(userBean.getId());if (position >= 0) {return;}int size = dataList.size();dataList.add(userBean);notifyItemInserted(size);}public void insertList(List<UserBean> list) {if (dataList != null && list != null && list.size() > 0) {int position = dataList.size();dataList.addAll(list);notifyItemRangeInserted(position, dataList.size());}}public void updateUserInfo(String uid, String name) {if (!TextUtils.isEmpty(uid)) {for (int i = 0, size = dataList.size(); i < size; i++) {UserBean bean = dataList.get(i);if (uid.equals(bean.getId())) {if (bean.getName() != name) {bean.setName(name);notifyItemChanged(i, "payload");}break;}}}}
} 

主要是对adapter的操作,逻辑很简单,不作解释。demo下载地址

直播里面用户进入房间离开房间效果相关推荐

  1. thinkphp6 websocket-room的加入房间+离开房间+房间消息发送

    先命令行建立WsJoin(加入房间) WsLeave(离开房间) RoomTest(房间发送文件) 客户端代码 <html><head></head><bod ...

  2. 主会场与分会场直播场景自由切换的实际应用效果

    主会场与分会场直播场景自由切换的实际应用效果 TONY原创 主会场与分会场直播场景自由切换功能截图 特点:支持PC端,也支持移动端观看,会场自由切换.实现大型直播活动时,一个主会场,多个分会场同时直播 ...

  3. php直播表情美颜的实现,如何在直播中实现优质的美颜SDK效果

    原标题:如何在直播中实现优质的美颜SDK效果 很多平台为了吸引更多的用户,都接入了美颜SDK,提升了主播的形象,视频看起来更加赏心悦目,使用的人多了,平台的流量自然也会随之上升,有利于平台的发展.平台 ...

  4. 直播的用户体验体系与质量监控方案

    6月24日,又拍云OpenTalk |2018音视频技术沙龙·上海站顺利落幕,这是又拍云OpenTalk | 2018音视频技术沙龙系列活动的第二站.作为又拍云技术分享的看家活动,本次OpenTalk ...

  5. 视频直播中用户连麦技术模型与特点分析

    本文章来源与网络(视频直播中用户连麦技术模型与特点分析 - 老头慢慢飞 - 博客园) 随着Web与移动视频直播应用的深度发展,有用户参与互动的视频直播技术被越来越多平台所支持,原来的RTMP流媒体方案 ...

  6. Axure高保真移动端智能数据监控+用户画像+饼状图+条形图+折线图数据统计+抖音直播app用户数据统计+智慧移动端主播粉丝、评论、播放量大数据统计+套餐购买、续费套餐prd流程

    作品介绍:Axure高保真移动端智能数据监控+用户画像+饼状图+条形图+折线图数据统计+直播app用户数据统计+智慧移动端主播粉丝.评论.播放量大数据统计+套餐购买.续费套餐prd流程 原型演示及下载 ...

  7. 使用socket,实现app直播源代码用户评论功能

    最近公司在做app直播源代码,项目经理要我们用socket长连接实现在线聊天,下面是使用socket实现app直播源代码用户互动的简单原理. 代码复制粘贴可以直接运行. //首先是服务器端packag ...

  8. php直播源码,css实现流星效果

    php直播源码,css实现流星效果相关的代码 <div id="stars" style="width: 100%;height: 100vh;margin: 0; ...

  9. 6、用户加入房间、离开房间提示

    app.js /*** 服务端*//*** 1 将nodejs-websock包引进来*/ var ws = require("nodejs-websocket");/*** 2 ...

最新文章

  1. web开发小记2:js触发css过渡
  2. Ubuntu17.10 下配置caffe 仅CPU i386可以直接apt install caffe-cpu,但是怎么运行mnist代码我懵逼了...
  3. DotNetCommon-搜集.neter开发常用的功能
  4. UUID,加密解密算法的使用
  5. 写帮助大家学习的小框架
  6. 计算机题硬盘分区首先,您对计算机硬盘分区了解多少: 如何进行分区合理?
  7. 回归问题中代价函数选择的概率解释(Probabilistic interpretation)
  8. 大一计算机基础教程期末考试,大一大学计算机基础教程期末考试题.doc
  9. laya龙骨换装_Laya的骨骼换装
  10. 国际贸易通用邮箱,实时邮件配送
  11. 各大短信平台接入方法
  12. 如何添加和删除字段?
  13. CSS3线性渐变与径向渐变
  14. python实训小队项目总结
  15. 【新书速递】从原理、架构、案例三个维度深度剖析分布式数据库
  16. 程序员的奋斗史(四十五)——大学断代史(九)——独自南下的岁月
  17. 365天挑战LeetCode1000题——Day 126 单调栈模板 500题纪念
  18. 数据库系统概论 实验报告答案 实验二:创建及管理数据表
  19. 2020.07.24日自编译L大源码openwrt固件x86软路由精简版
  20. TP5,TP6数据排序方法按指定函数FIELD排序的方法

热门文章

  1. TableWidgetItem的flag如何设置,使得它不能被编辑?
  2. 手游LTV(用户终生价值)计算公式
  3. [Famous Awards in Different Fields]01:Hugo Awards
  4. Java 集合深入理解(11):LinkedList
  5. JAF微服务基础开发平台
  6. 模型交易平台|金融大数据项目案例模型分享
  7. 华泰证券分布式数据库的探索与应用
  8. python批量读取视频并按指定数量抽帧
  9. 《决战Linux到精通》学习笔记
  10. <url-pattern>/</url-pattern>与<url-pattern>/*</url-pattern>的区别