Google I / O 2010 - ListView的世界notifyDataSetChanged()

时间:2011-10-10 13:39:49

标签: android listview

抱歉愚蠢的问题。但真的很有趣,也很难理解。在本次会议中讨论了notifyDataSetChanged()方法。

从此方法的文档中 - “在观察到的数据集发生变化时调用,以及在读取时包含数据的新状态”。我的英语不好,我不明白。但是,如果我需要使用新数据集刷新ListView时调用该方法,我是对的吗?

如果我是对的,那我很困惑。在过去和我的第一个程序中我玩了android的联系人api。并在asynctask中运行一些处理。此时出现了带进度条的对话框,在后台,您可以看到ListView的状态是如何实时更改的。 ListView行的数据通过BindView更改。

为什么呢?所以我有些不对劲。请解释一下。

1 个答案:

答案 0 :(得分:1)

正如我读到的那样,BindView仅用于游标,它基本上是一种特定类型的数据集。您可以拥有其他数据集,例如API中的ArrayListAdapter,它使用ArrayList作为其数据集。如果数据集发生更改,则必须调用notifyDataSetChanged()以通知列表视图必须重新计算其边界并且必须重新绘制其视图(可能还有一些)。

如果您决定自己编写并创建通过适配器修改列表视图中显示的数据的可能性(可以想象在您的自制适配器中添加addObject(SomeObject o)等方法),那么你' d在该方法中调用notifyDataSetChanged()。

类似地,如果你有一个deleteObject(SomeObject x),如果剩下的数据集大于零,你会调用notifyDataSetChanged(),或者当剩下的数据集为空时,你会调用notifyDataSetInvalidated(),这反过来又会一些额外的东西,比如在你有一个指定的情况下在列表中设置所谓的空视图。