我想在RecyclerView中更新一个项目.该项只是持有isFavourite标志的POJO bean.用户可以单击项目并设置/取消设置为收藏夹.我已经使用DiffUtil回调实现了adater.有一个回调方法boolean areContentsTheSame(int oldItemPosition,int newItemPosition)但在我的情况下,旧项和新项是同一个对象,所以没有什么可比较(equals方法返回true).我应该保存以前的标志值然后检查更改还是任何简单的解决方案? 最佳答案 这是我的解决方案.我不使用DiffUtil而不是使用notifyItemChanged(int position,Object payload). payload变量包含要更新的数据.请参考以下代码:
public void updateMedication(MedicationRecord medication) {
int index = mData.indexOf(medication);
notifyItemChanged(index);
Bundle diffPayLoad = new Bundle();
diffPayLoad.putInt("notify", medication.getNotify());
notifyItemChanged(index, diffPayLoad);
}
在RecyclerView.Adapter中,添加此函数以处理有效负载
@Override
public void onBindViewHolder(@NonNull SharedMedVH holder, int position, @NonNull List<Object> payloads) {
if (payloads.isEmpty()){
super.onBindViewHolder(holder, position, payloads);
} else {
Bundle o = (Bundle) payloads.get(0);
for (String key : o.keySet()){
if (key.equals("notify")){
holder.updateNotify(o.getInt("notify"));
}
}
}
}