- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想知道RecylerView的swapAdapter和notifyDatasetChanged方法到底有什么区别?修改数据时使用哪个更好?
最佳答案
如文档所述。
public void swapAdapter (Adapter adapter, boolean removeAndRecycleExistingViews)
用提供的适配器交换当前适配器。它类似于 setAdapter(Adapter),但假定现有适配器和新适配器使用相同的 RecyclerView.ViewHolder 并且不清除 RecycledViewPool。
请注意,它仍然会调用 onAdapterChanged 回调。
至于
public final void notifyDataSetChanged ()
通知所有已注册的观察者数据集已更改。
有两类不同的数据更改事件,项目更改和结构更改。项目更改是指单个项目的数据已更新但未发生位置更改。结构更改是指在数据集中插入、删除或移动项目。
此事件未指定数据集发生了什么变化,迫使任何观察者假设所有现有项目和结构可能不再有效。 LayoutManagers 将被迫完全重新绑定(bind)和重新布局所有可见 View 。
当使用此方法时,RecyclerView 将尝试为报告它们具有稳定 ID 的适配器合成可见的结构更改事件。这有助于实现动画和视觉对象持久性,但仍需要重新绑定(bind)和重新布局单个项目 View 。
如果您正在编写一个适配器,那么如果可以的话,使用更具体的更改事件总是会更有效。将 notifyDataSetChanged() 作为最后的手段。
好吧,我觉得文档很好地说明了区别所在,swapAdapter(ad,true) 是一种更改数据的方法,而 notifyDataSetChanged() 是一种通知适配器在数据更新后重绘其 View 的方法已更改。
关于android - Recycler View 中的 swapadapter 方法和 notifydatasetchanged 方法有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32050210/
我想知道RecylerView的swapAdapter和notifyDatasetChanged方法到底有什么区别?修改数据时使用哪个更好? 最佳答案 如文档所述。 public void swapA
我是一名优秀的程序员,十分优秀!