notifyDataSetChanged与notifyItemInserted

时间:2018-02-20 22:27:30

标签: android android-recyclerview recycler-adapter

如果我们使用这两种方法告诉适配器您指向的数据已更改,那么我们感到很困惑。

3 个答案:

答案 0 :(得分:2)

notifyDataSetChanged()可以被视为" major"更改。您告诉适配器数据集中的所有已更改,因此它应该重新绑定每个子项。

notifyItemInserted()(以及notifyItemRemoved()等其他方法)都可以被视为" minor"变化。您正确地告诉适配器 数据集的更改方式,因此它可以执行优化(例如仅重新绑定受影响的子项)。

值得注意的是,使用" minor"默认情况下,更改方法也会为您提供精彩的动画,这样用户就可以更轻松地查看列表中的更改内容。

答案 1 :(得分:1)

基于文档

notifyDataSetChanged()

  

此事件未指定数据集的更改内容,强制任何观察者假定所有现有项目和结构可能不再有效。 布局管理员将被迫完全重新绑定并重新布局所有可见的视图

notifyItemInserted()

  

数据集中其他现有项目的表示仍被认为是最新的,不会反弹,但其位置可能会有所改变。

主要区别在于notifyDataSetChanged()会导致更多开销,因为它会强制LayouManagers完全重新绑定视图,因为notifyItemInserted()不会再次反弹所有视图,而是改变它们的位置。

为了获得更好的性能,请依靠notifyDataSetChanged()作为最后的手段。尽可能使用更具体的更改事件(如notifyItemInserted())以提高效率。

答案 2 :(得分:0)

notifyItemInserted(int position)将插入项目的位置作为参数,通知该项目插入,从而也在该项目后移位。

notifyDataSetChanged()通知连接到适配器的数据集已更改。