`ListView.invalidateViews()`和'Adapter.notifyDataSetChanged()'之间有什么区别吗?

Gau*_*wal 18 android android-listview

有什么区别ListView.invalidateViews()Adapter.notifyDataSetChanged()

K-b*_*llo 39

是的,有.

ListView.invalidateViews()用于告诉ListView使其所有子项视图无效(重绘它们). 请注意,不需要与项目相同数量的视图.这是因为ListView会回滚其项目视图,并在您滚动时以智能方式在屏幕上移动它们.

Adapter.notifyDataSetChanged()另一方面,是告诉适配器的观察者正在调整的内容已经改变.通知更改的数据集将导致listview再次调用您的适配器方法来调整滚动条,重新生成项目视图等...

大多数时候你想要使用notifyDataSetChanged而不是invalidateViews,但它肯定取决于你想要完成的事情.

  • @GauravAgarwal:很好地使用`invalidateViews`将改变你的`ListView`的字体大小:你不是触摸数据,而是渲染. (13认同)
  • @black crow:listview不会为每个项目创建一个视图.相反,它通常只有适合屏幕的视图数量加一个,并在滚动时移动它们.简单来说:它不会为不可见的项创建视图. (2认同)
  • 屏幕上有10个视图的空间,你的适配器中有20个...所以你有10个视图和20个项目. (2认同)