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() 是一种通知适配器在数据已更改。
我想知道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() 是一种通知适配器在数据已更改。