【发布时间】:2012-05-20 19:58:48
【问题描述】:
ListView.invalidateViews() 和 Adapter.notifyDataSetChanged() 有什么区别吗?
【问题讨论】:
ListView.invalidateViews() 和 Adapter.notifyDataSetChanged() 有什么区别吗?
【问题讨论】:
是的,有。
ListView.invalidateViews() 用于告诉 ListView 使其所有子项视图无效(重绘它们)。
请注意,视图数不必与项目数相等。 这是因为 ListView 会回收其项目视图并在您滚动时以智能方式在屏幕上移动它们。
Adapter.notifyDataSetChanged() 另一方面,是告诉适配器的观察者正在适配的内容已经改变。通知数据集更改将导致列表视图再次调用您的适配器方法来调整滚动条、重新生成项目视图等...
大多数情况下,您希望使用notifyDataSetChanged 而不是invalidateViews,但这当然取决于您要完成的任务。
【讨论】:
invalidateViews 将仅在您需要重绘可见项目但它们上没有任何变化时才有用...
invalidateViews 的一个很好的用途是更改ListView 的字体大小:您不会触摸数据,而是触摸渲染。