dynamic使用适配器更新列表视图
本教程使用的SimpleAdapter工作正常,但是当input新数据时,我需要更新适配器中的数组。
你能指导我如何更新一个ListView使用别的比SimpleAdapter?
使用由ArrayList支持的ArrayAdapter 。 要更改数据,只需更新列表中的数据并调用adapter.notifyDataSetChanged() 。
如果您创build自己的适配器,则有一个值得注意的抽象函数:
public void registerDataSetObserver(DataSetObserver observer) { ... }
您可以使用给定的观察者来通知系统更新:
private ArrayList<DataSetObserver> observers = new ArrayList<DataSetObserver>(); public void registerDataSetObserver(DataSetObserver observer) { observers.add(observer); } public void notifyDataSetChanged(){ for (DataSetObserver observer: observers) { observer.onChanged(); } }
虽然你不喜欢有像SimpleAdapter和ArrayAdapter这样的东西,你不需要这么做吗?
SimpleListAdapter主要用于静态数据! 如果你想处理dynamic数据,你最好使用ArrayAdapter , ListAdapter或CursorAdapter,如果你的数据来自数据库。
以下是了解ListAdapter中绑定数据的有用教程
正如在这个SO问题中提到的
大多数人推荐使用notifyDataSetChanged()
,但是我发现这个链接非常有用。 事实上,使用clear
和add
你可以使用更less的内存占用量和更多的响应应用程序来实现相同的目标。
例如:
notesListAdapter.clear(); notes = new ArrayList<Note>(); notesListAdapter.add(todayNote); if (birthdayNote != null) notesListAdapter.add(birthdayNote); /* no need to refresh, let the adaptor do its job */