18
ListView.invalidateViews()
和Adapter.notifyDataSetChanged()
之间有什么区别吗?`ListView.invalidateViews()`和'Adapter.notifyDataSetChanged()'之间是否有区别?
ListView.invalidateViews()
和Adapter.notifyDataSetChanged()
之间有什么区别吗?`ListView.invalidateViews()`和'Adapter.notifyDataSetChanged()'之间是否有区别?
嗯,是的,有。
ListView.invalidateViews()
用于告诉ListView使其所有子项视图无效(重绘它们)。 请注意,不需要有与项目相同数量的视图。这是因为在滚动时,ListView可以循环使用它的项目视图并以智能方式在屏幕上移动它们。
Adapter.notifyDataSetChanged()
另一方面,是告诉适配器的观察者,正在改编的内容已经改变。通知更改的数据集将导致列表视图再次调用适配器方法来调整滚动条,重新生成项目视图等...
大多数时候您想要使用notifyDataSetChanged
而不是invalidateViews
,但它肯定取决于什么你正在努力完成。
当你说_注意不需要与items_有相同数量的视图时,我有点困惑。视图和项目之间有什么区别。 –
@black crow:listview不会为每个项目创建一个视图。相反,它通常只有适合屏幕加1的视图数量,并在滚动时移动它们。简而言之:它不会为不可见的项目创建视图。 –
您可以在屏幕上显示10个视图的空间,并且您的适配器中有20个视图...所以您有10个视图和20个项目。 – Barak