我确实使用此代码在 ListView 更改后用数据重新填充数据
// ListView lv;
// MyListAdapter la;
// DataClass dc;
dc.remove(object_id);
lv.setAdapter(la);
这是最好的方法吗?因为我们无法使用仅在 ArrayAdapter
中可用的 notifyDataSetChanged()
吗?
解决方案
//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();
}
最佳答案
对于 CursorAdapter我使用以下代码:
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/