Java 将对象列表(引用)传递给BaseAdapter扩展类,并在更改引用后调用notifyDataSetChanged()无效

Java 将对象列表(引用)传递给BaseAdapter扩展类,并在更改引用后调用notifyDataSetChanged()无效,java,android,android-asynctask,baseadapter,Java,Android,Android Asynctask,Baseadapter,我这样做是为了理解。在我的例子中,我有一个由BaseAdapter扩展的类。在新的类中,我传递了要绑定到android中ListView的对象列表,并保留了对传递对象列表的引用 ListView list2 = (ListView)findViewById(R.id.attachmentList); list2.setAdapter(new LazyAdapter(BaseAdapterExtention.this,getApplication().getInteraction().ge

我这样做是为了理解。在我的例子中,我有一个由
BaseAdapter
扩展的类。在新的类中,我传递了要绑定到android中
ListView
的对象列表,并保留了对传递对象列表的引用

ListView list2 = (ListView)findViewById(R.id.attachmentList);
    list2.setAdapter(new LazyAdapter(BaseAdapterExtention.this,getApplication().getInteraction().getList() ));
像上面一样,我将传递的数据保存为一个singleton
getApplication().getInteraction().getList()
,我称之为获取数据的singleton

每个列表项都有一个按钮,每个列表项按钮都有一个单击侦听器,单击按钮时,我将删除该项并重新填充singleton对象中的数据集,如下所示

getApplication().getInteraction().setList(ListofObject)

为此,我调用了一个异步任务,并传递了这个适配器

new ListAsync(activity,BaseAdapterExtention.this).execute();
onPostExecute()
中,我调用
适配器.notifyDataSetChanged()
。但是适配器对象列表是相同的,删除没有反映在该列表中,因此
列表视图是相同的


我怎么了?

在调用
adapter.notifyDataSetChanged()之前,只需调用
adapter.clear()

通过执行
adapter.clear()
它从适配器中删除所有元素,然后使用
adapter.notifyDataSetChanged()
它通知附加的观察者基础数据已更改,反映数据集的任何视图现在都将更新,不会出现任何问题

编辑

在扩展
BaseAdapter
时,
.clear()
将不起作用。因此,您可以再次调用
list2.setAdapter()
并按如下方式传递null:

list2.setAdapter(null);
adapter.notifyDataSetChanged();

我在活动中添加了一个public方法,其中包含ListView

public void notifyDataChangeInAdapter(){
        list2.setAdapter(new BaseAdapterExtention(ExampleActivity.this, getApplication().getInteraction().getList() ));
}

我使用传递给asynctask构造函数的活动引用在onPostExecute()方法中调用此方法。

谢谢,我已经检查了此方法,BaseAdapter扩展类没有名为“clear()”的方法定义。好的,您是对的。
单击按钮时,我正在删除该项
您实际上是如何删除的?通过调用列表(项)上的
.remove()
?获取绑定对象信息(id)并在数据库中删除该信息,然后从数据库中重新获取数据,然后在singleton ReferenceOK中设置它们,如果我使用此选项,我必须将list2的引用传递给异步任务,我将把这个标记为正确答案,如果它是这样工作的话。谢谢,你需要这样做。我认为将
list2
后面的数据设置为
null
就可以了。试试看。