gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:14:13 24 4
gpt4 key购买 nike

我想更新我的 RecyclerView 中的单个项目。该项目只是持有 isFavourite 标志的 POJO bean。用户可以单击项目并设置/取消设置为收藏夹。我已经使用 DiffUtil 回调实现了适配器。有一个回调方法 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中,添加这个函数来处理payload

@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"));
}
}
}
}

关于android - 使用 DiffUtil 更新 RecyclerView 中的单个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46008457/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com