本教程使用的是SimpleAdapter,它工作得很好,但当输入新数据时,我需要更新适配器中的数组。
请问你能否指导我如何使用除SimpleAdapter之外的其他方法来更新ListView?
使用由ArrayList支持的ArrayAdapter。要更改数据,只需更新列表中的数据并调用adapter.notifyDataSetChanged()。
如果您创建自己的适配器,那么有一个值得注意的抽象函数:
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 这样的东西很方便吗,这样就不用自己去做那么多了吧?
大多数人推荐使用notifyDataSetChanged()
,但我发现this link非常有用。实际上,使用clear
和add
,您可以使用更少的内存占用和更响应的应用程序来实现同样的目标。
例如:
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 */
ListView
时,我都会使用它。希望这可以让您了解如何实现自己的方法。public static void UpdateListView(List<SomeObject> SomeObjects, ListView ListVw)
{
if(ListVw != null)
{
final YourAdapter adapter = (YourAdapter) ListVw.getAdapter();
//You'll have to create this method in your adapter class. It's a simple setter.
adapter.SetList(SomeObjects);
adapter.notifyDataSetChanged();
}
}
我正在使用一个继承自BaseAdapter
的适配器。它应该适用于任何其他类型的适配器。