我想知道RecylerView的swapAdapter和notifyDatasetChanged方法有什么区别?在修改数据时哪一个更好用?
答案 0 :(得分:7)
正如文档所述。
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()是一种通知适配器重绘其视图的方法已经改变了。