我确实使用此代码在列表视图更改后重新填充数据
// ListView lv;
// MyListAdapter la;
// DataClass dc;
dc.remove(object_id);
lv.setAdapter(la);
这是因为我们不能使用只有在
notifyDataSetChanged()
中才可用的ArrayAdapter
的最佳方式吗?解决方案
//MyListAdapter.java
private ArrayList<DataSetObserver> observers = new ArrayList<DataSetObserver>();
public void registerDataSetObserver(DataSetObserver arg0) {
observers.add(arg0);
}
public void unregisterDataSetObserver(DataSetObserver arg0) {
observers.remove(arg0);
}
public void notifyDataSetChange() {
for (DataSetObserver d : observers) {
d.onChanged();
}
}
public void remove(int position) {
[DataClass object].remove(position);
notifyDataSetChange();
}
最佳答案
对于aCursorAdapter我使用以下代码:
mAdapter.getCursor().requery();
如果您使用的是自定义适配器或如您所评论的那样:只希望listadapter作为成员变量。而不是使用
private CustomAdapter mAdapter;
(我建议使用avoid creating unnecessary objects)。您可以使用DataSetObserver部分和ListAdapter.registerDataSetObserver(DataSetObserver observer)。DataSetObserver.onChanged()将由baseadapter实现调用,因此它应该适用于所有适配器。
baseadapter.notifydatasetchanged():
public void notifyDataSetChanged() {
mDataSetObservable.notifyChanged();
}
关于java - 在ListAdapter(ListView)中重新填充数据的最佳方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7626575/