Recycler 视图中的 swapadapter 方法和 notifydatasetchanged 方法有什么区别?

What is the difference between swapadapter method and notifydatasetchanged method in Recycler view?

我想知道RecylerView的swapAdapter和notifyDatasetChanged方法到底有什么区别?修改数据时用哪个比较好?

如文档所述。

public void swapAdapter (Adapter adapter, boolean removeAndRecycleExistingViews)

用提供的适配器交换当前适配器。它与 setAdapter(Adapter) 类似,但假定现有适配器和新适配器使用相同的 RecyclerView.ViewHolder 并且不清除 RecycledViewPool。

请注意,它仍然会调用 onAdapterChanged 回调。

至于

public final void notifyDataSetChanged ()

通知所有已注册的观察者数据集已更改。

有两种不同的类数据更改事件,项目更改和结构更改。项目更改是指单个项目的数据已更新但未发生位置更改。结构更改是指在数据集中插入、删除或移动项目。

此事件未指定数据集发生了什么变化,迫使任何观察者假设所有现有项目和结构可能不再有效。 LayoutManagers 将被迫完全重新绑定和重新布局所有可见视图。

当使用此方法时,RecyclerView 将尝试为报告它们具有稳定 ID 的适配器合成可见的结构更改事件。这有助于实现动画和视觉对象持久性,但仍需要重新绑定和重新布局单个项目视图。

如果您正在编写适配器,那么如果可以的话,使用更具体的更改事件总是更有效。依靠 notifyDataSetChanged() 作为最后的手段。

好吧,我觉得文档很好地说明了区别所在,swapAdapter(ad,true) 是一种更改数据的方法,而 notifyDataSetChanged() 是一种通知适配器在数据已更改。