我遇到了RecyclerView和RecyclerView.Adapter的问题。我有一个函数,可以将一些项目列表设置到适配器中。当用户进行下拉刷新时,我会加载新的数据,这意味着一些项目是新的,然后我会将它们设置到适配器中并使其无效化。我的问题在于notifyItemRangeInserted()和notifyItemRangeChanged()。当新项目出现时,如果我先删除它们,然后notifyItemRangeRemoved(),再添加并最终调用notifyItemRangeInserted(),那么它将起作用,但所有项目都会被无效化并且闪烁。否则,如果我确定新旧数据集之间的差异大小,它不会使正确的元素失效。
public void setItems(@NonNull List<ItemType> items) {
final int oldSize = mItems.size();
mItems.clear();
notifyItemRangeRemoved(firstPosition(), oldSize);
mItems.addAll(items);
notifyItemRangeInserted(firstPosition(), items.size());
}
mItems
是一个 ArrayList。
firstPosition
是什么? - BlackbeltnotifyItemRangeInserted(firstPosition(), oldSize);
解决了当前的问题,但是仅更新一小部分项目的问题没有解决,必须先删除旧项目,然后应用新项目。这样闪烁会出现,但对于我的当前解决方案来说是可以接受的。 - John