Android ListView 适配器 notifyDataSetInvalidated() 与 notifyDataSetChanged()

Posted

技术标签:

【中文标题】Android ListView 适配器 notifyDataSetInvalidated() 与 notifyDataSetChanged()【英文标题】:Android ListView Adapter notifyDataSetInvalidated() vs notifyDataSetChanged() 【发布时间】:2011-09-16 19:51:08 【问题描述】:

有什么区别? android 文档没有关于 notifyDataSetInvalidated() 的描述。我在想也许您调用该函数来通知所有注册的侦听器,但使用 notifyDataSetChanged() 不通知他们?

【问题讨论】:

【参考方案1】:

Changed 表示数据集发生了变化。更新了单个项目,或者添加或删除了项目。无效意味着数据源不再可用。

【讨论】:

为了扩展这一点,来自 Romain Guy 的回复:“notifyDataSetInvalidated() 意味着适配器内的数据不再有效。这将导致 ListView 停止填充。应该很少有任何理由使用它。” 为了进一步解释 @Glendon 的评论,this Google groups thread 和 this one 包含类似的问题,由一位名叫 Romain Guy 的 Android 框架工程师回答。 如果有人对调用这些方法时以编程方式在幕后发生的事情感兴趣,请参阅我的回答 here 这些方法的文档已针对即将发布的版本进行了扩展。

以上是关于Android ListView 适配器 notifyDataSetInvalidated() 与 notifyDataSetChanged()的主要内容,如果未能解决你的问题,请参考以下文章

Android-ListView两种适配器以及事件监听

android ListView 用法

android中的listview计数与适配器计数

带有arraylist的listview,android中的简单适配器

带有自定义适配器的 Android ListView 有视觉故障

如何修复动态适配器包装器 Android 中的 notifyDataSetChanged/ListView 问题