使用DiffUtil

时间:2017-09-01 22:00:10

标签: android android-recyclerview recycler-adapter

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

1 个答案:

答案 0 :(得分:2)

这是我的解决方案。我不使用DiffUtil而不是我使用notifyItemChanged(int position,Object 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"));
            }
        }
    }

}