我确实使用此代码在列表视图更改后重新填充数据

// 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/

10-11 19:24
查看更多