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