使用DiffUtil更新RecyclerView中的单个项目

pio*_*ski 6 android recycler-adapter android-recyclerview

我想在RecyclerView中更新一个项目。该项目只是持有isFavourite标志的POJO bean 。用户可以单击项目并设置/取消收藏。我已经用DiffUtil回调实现了adater。有一个回调方法,boolean areContentsTheSame (int oldItemPosition, int newItemPosition)但在我的情况下,旧项目和新项目是同一对象,因此没有可比较的内容(equals方法返回true)。我应该保存先前的标志值,然后检查更改还是任何简单的解决方案?

Nam*_*ham 5

这是我的解决方案。我不使用 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);
}
Run Code Online (Sandbox Code Playgroud)

在 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"));
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)