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() ));
像上面一样,我将传递的数据保存为一个singletongetApplication().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
就可以了。试试看。