如果我们使用这两种方法告诉适配器您指向的数据已更改,那么我们感到很困惑。
答案 0 :(得分:2)
notifyDataSetChanged()
可以被视为" major"更改。您告诉适配器数据集中的所有已更改,因此它应该重新绑定每个子项。
notifyItemInserted()
(以及notifyItemRemoved()
等其他方法)都可以被视为" minor"变化。您正确地告诉适配器 数据集的更改方式,因此它可以执行优化(例如仅重新绑定受影响的子项)。
值得注意的是,使用" minor"默认情况下,更改方法也会为您提供精彩的动画,这样用户就可以更轻松地查看列表中的更改内容。
答案 1 :(得分:1)
基于文档
此事件未指定数据集的更改内容,强制任何观察者假定所有现有项目和结构可能不再有效。 布局管理员将被迫完全重新绑定并重新布局所有可见的视图。
数据集中其他现有项目的表示仍被认为是最新的,不会反弹,但其位置可能会有所改变。
主要区别在于notifyDataSetChanged()
会导致更多开销,因为它会强制LayouManagers完全重新绑定视图,因为notifyItemInserted()
不会再次反弹所有视图,而是改变它们的位置。
为了获得更好的性能,请依靠notifyDataSetChanged()
作为最后的手段。尽可能使用更具体的更改事件(如notifyItemInserted()
)以提高效率。
答案 2 :(得分:0)
notifyItemInserted(int position)
将插入项目的位置作为参数,通知该项目插入,从而也在该项目后移位。
notifyDataSetChanged()
通知连接到适配器的数据集已更改。