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() ,但是我发现这个链接非常有用。 事实上,使用clearadd你可以使用更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 */