Java 在ListAdapter(ListView)中重新填充数据的最佳方法

Java 在ListAdapter(ListView)中重新填充数据的最佳方法,java,android,list,listview,adapter,Java,Android,List,Listview,Adapter,我确实使用这段代码在列表视图更改后重新填充数据 // ListView lv; // MyListAdapter la; // DataClass dc; dc.remove(object_id); lv.setAdapter(la); 这是最好的方法吗?因为我们不能使用仅在ArrayAdapter中可用的notifyDataSetChanged() 解决方案 //MyListAdapter.java private ArrayList<DataSetObserver> obs

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

// 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();
} 
//MyListAdapter.java
private ArrayList Observators=新建ArrayList();
公共无效注册表DataSetObserver(DataSetObserver arg0){
添加(arg0);
}
public void unregisterDataSetObserver(DataSetObserver arg0){
移除(arg0);
}
public void notifyDataSetChange(){
for(DataSetoObserver d:观察者){
d、 onChanged();
}
}
公共无效删除(内部位置){
[数据类对象]。删除(位置);
notifyDataSetChange();
} 
对于a,我使用以下代码:

mAdapter.getCursor().requery();
如果您使用的是自定义适配器或如您所评论的:仅希望ListAdapter作为成员变量。而不是使用
private CustomAdapter mAdapter(我建议这样做)

你可以使用part和。将由BaseAdapter实现调用,因此它应该适用于所有适配器

BaseAdapter.notifyDataSetChanged():


您可以使用ArrayAdapter,它接受列表而不是数组。通过这种方式,您可以在其上使用notifyDataSetChanged()。

您似乎认为我做了什么错事。 正如你所知道的,它没有改变

光标似乎是与ListView最匹配的。博士。表示“数据通常来自光标,但这不是必需的。ListView可以显示包装在ListAdapter中的任何数据。” 如果你检查了两个链接(观察者),你会注意到一些东西ListAdapter与光标配合得很好。那么为什么不尝试使用其他适配器呢


我认为刷新适配器的最好方法是使用或扩展BaseAdapter(使用ListView)。并在更改数据集后使用notifyDataSetChanged。在我的例子中,它运行良好且柔和(使列表视图和项目无效,滚动位置就在那里!不转到第一个位置)。

对不起,不使用游标和游标适配器,而是使用+1提示您使用哪种适配器?从这个问题中,我认为您没有使用ArrayAdapter,所以第二个客户是Cursor。谢谢,我最终实现了
[register/delete]DataSetoObserver
,并在更改数据后调用custom notify。当然,我知道ArrayAdapter有这个函数(正如我在问题中提到的),但我正在寻找使用ListAdapter的解决方案remove()中的方括号表示法是什么?这是Java语法还是伪代码符号?
public void notifyDataSetChanged() {
    mDataSetObservable.notifyChanged();
}