最终的实现效果:
用户进入房间
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
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = mInflater.inflate(R.layout.item_live_user, parent, false);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public 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);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
UserViewHolder viewHolder = (UserViewHolder) holder;
viewHolder.setData(dataList.get(position), position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public 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下载地址