最近项目中遇到在列表中点赞,刷新这个列表,item会闪动的问题。于是想到微信朋友圈点赞时,只是更新点赞的View,并不会重绘整个item,后来找到了RecyclerView局部刷新的notifyItemChanged(int position,Object payload)方法
RecyclerView局部刷新notifyItemChanged(int position,Object payload),payload相当于一个标记 只要不为空 可以实现具体刷新到一个item中的指定view
/**
* 根据 position 刷新某一个item
*
* @param position
*/
public void notifySomeoneItem(int position) {
//RecyclerView局部刷新notifyItemChanged(int position,Object payload),payload相当于一个标记 只要不为空 可以实现具体刷新到一个item中的指定view
notifyItemChanged(position,"payload");
}
重写adapter中的onBindViewHolder(RecyclerView.ViewHolder holder, int position, List payloads)方法
局部刷新到item中指定view,必须重写该方法
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position, @NonNull List payloads) {
HouseResViewHolder viewHolder = (HouseResViewHolder) holder;
RecReadDataModel recommendedReadListModel = mList.get(position);
if (recommendedReadListModel == null) return;
if (payloads.isEmpty()) { //正常绑定数据逻辑
bindViewData(position, viewHolder, recommendedReadListModel);
} else { //刷新一个指定item中的点赞view 而不是重新渲染这个item中的所有view 解决了点赞时item闪动问题
//设置点赞状态
setPraiseState(position, viewHolder, recommendedReadListModel);
}
}
如果payloads列表不是空的,你就可以在else代码块里面刷新你想更新的控件了(记得不需要更新的控件就不要写在这里了)。
项目时间紧,需求都搞不赢,来不及看源码。。。告辞