DiffUtil-插入/删除的项目,通知现有项目

时间:2018-09-26 08:30:26

标签: android android-recyclerview

使用DiffUtil添加或删除项目时,在android.support.v7.util.AdapterListUpdateCallback内部仅分别调用notifyItemRangeInserted(1, 1)notifyItemRangeRemoved(1,1),而不会调用notifyItemRangeChanged()。我使用setTag(position)设置了每个视图的位置,但是没有更新现有项目的位置。不想手动更新项目。

列表更新:

 private void updateItems(final List<Feed> newPosts) {
    List<Feed> olderPosts = new ArrayList<>(currentPosts);
    final CustomDiffCallback DIFF_CALLBACK = new CustomDiffCallback(olderPosts, newPosts);
    final DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(DIFF_CALLBACK, true);
 }

1 个答案:

答案 0 :(得分:0)

结果是我们不能使用setTag()getTag()来将位置传递给视图。由于DiffUtil的主要目的是最大程度地减少未更改视图的更新,因此已在其上设置位置的视图无法通过更新通道,因此将返回陈旧的位置。尽管就我而言,我将自定义侦听器放在一个单独的类中,但更新部分却有点不寻常。我必须获得getLayoutPosition()中的ViewHolder。也可以使用getAdapterPosition()