Taw*_*ani 29 android dataadapter
adapter.notifyDataSetInvalidated()方法完成了什么?没有关于它的文档.
我试图重新加载ListView和notifyDataSetChanged或notifyDataSetInvalidated似乎没有完成任何事情.
Cri*_*ian 27
这取决于适配器实现...如果你看一下源代码,你会看到:
notifyDataSetInvalidated()调用notifyInvalidated()的的DataSetObservable类(见这里)notifyInvalidated()调用onInvalidated()方法DataSetObserver(参见此处).onInvalidated() 什么都不做 ......这是它的实现:
public void onInvalidated() {
// Do nothing
}
Run Code Online (Sandbox Code Playgroud)
DataSetObserver是一个抽象类,因此由子类决定要做什么onInvalidated().
Ton*_*han 18
我最近就遇到了这个问题,并希望制定为那些谁知道编程,当你调用发生了什么notifyDataSetChanged()和notifyDataSetInvalidated().*简短的回答,请到这里
正如@Cristian在他的回答中所说,当你在你的适配器上调用这些通知方法时,它基本上会调用几个类,最后调用onChanged()/ onInvalidated()在DataSetObserver你的适配器的注册s上.
如果你遵循代码,你确实会看到它DataSetObserver是抽象的,并且onChanged()/ onInvalidated()methods是空的,等待子类的实现.
如果这是故事的结尾,那么为什么Android框架工程师会告诉我们如果他们什么也不做就会调用这些方法?它需要一些挖掘,但事实证明已经有一个DataSetObserver被调用的子类,AdapterDataSetObserver它存在于抽象类中AdapterView(由类GridView和它扩展ListView).这名观察员将自动由Android,当你创建setAdapter()你的AdapterView和被注册到你的适配器.
在这里,你可以看到这些方法实际上做的所有疯狂的东西.文档很差,起初我以为我需要注册我自己的子类DataSetObserver来实现这些功能,但事实证明已经为你创建了一个.
*我认为可能有用的东西:我相信你可以DataSetObserver在你的适配器上注册多个(除了默认的).如果需要,这将允许您做一些额外的工作(例如,可能在下载位图时将进度条视图与图像视图交换).