Recyclerview 更改列表内容后的刷新
切记:
1. Recyclerview刷新 需要先修改数据集(list)!!!
2. 之后再使用notifyItemRemoved(position); 和 notifyItemRangeChanged(position,getItemCount()-position);
情况说明:我的recyclerview存放了一组数据,动态添加的,每行中包含子项目的数据和一个删除按钮。我是要对列表中的某个项目进行删除,之后需要列表刷新。
下图是Adapter中的onBindViewHolder方法:
@Override
public void onBindViewHolder(@NonNull final favour_itemAdpt.ViewHolder holder, final int position) {
holder.tv_name.setText(food_items.get(position).getName().toString());
holder.tv_mael.setText(food_items.get(position).getMeal().toString());
holder.tv_time.setText(String.valueOf(food_items.get(position).getTime())+" min");
holder.button_delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//must notify the data set!!!
food_items.remove(position);
//favour_itemAdpt.this.notifyDataSetChanged();
notifyItemRemoved(position);
notifyItemRangeChanged(position,getItemCount()-position);
}
});
}
说明:
1. food_items是我的数据集,也就是用来填充进列表的。我在删除某个项之后,需要先在food_items中删掉它(根据位置 position)
2. notifyItemRemoved(position); 是移除该位置的项目
3. notifyItemRangeChanged(position,getItemCount()-position); 是局部刷新从该position位置开始到剩余的所有项
补充说明:
position 也可表示为 holder.getLayoutPosition()
不刷新数据集会导致数据紊乱和其他bug