ListAdapter
建立在 DiffUtil
工具之上,它会在新旧列表数据之间进行比较,然后计算出数据变化的差异,最后根据这些差异来更新 RecyclerView 。
在使用 ListAdapter
时,若想要更新列表的内容,推荐的方式是使用 submitList()
方法来提交新的列表数据。但需要注意,这个方法对比的是两个引用的列表数据之间是否发生了变化,而不是列表中的内容是否发生了变化。 因此,如果直接修改 datas
的内容并使用 submitList(datas)
,而没有创建一个新的列表对象,则并不会触发列表的更新
解决方法有两种:
-
创建新的列表对象并提交: 在对
datas
进行修改后,创建一个新的列表对象,然后使用submitList()
提交这个新的列表对象,这样ListAdapter
就会重新计算新旧列表之间的差异,并更新 RecyclerView 的显示:List<Data> newDatas = new ArrayList<>(datas); adapter.submitList(newDatas);
或创建匿名对象:
adapter.submitList(new ArrayList<>(datas))
-
直接调用
notifyDataSetChanged()
: 如果你已经确定了数据集发生了变化但不想重新计算差异,也可以直接调用notifyDataSetChanged()
方法来通知 RecyclerView 更新显示。adapter.notifyDataSetChanged();