我这样做是为了理解。在我的情况下,我有一个由BaseAdapter
扩展的类。在新类中,我传递了我想要绑定到android中的ListView
的对象列表,并且我保留了对该传递的对象列表的引用。
ListView list2 = (ListView)findViewById(R.id.attachmentList);
list2.setAdapter(new LazyAdapter(BaseAdapterExtention.this,getApplication().getInteraction().getList() ));
与上面一样,我将我传递的数据作为单身getApplication().getInteraction().getList()
保留,我将其称为获取数据。
每个列表项都有一个按钮,每个列表项按钮都有一个点击监听器,当点击一个按钮时,我正在删除该项并重新填充单个对象中的数据集,如下所示
getApplication().getInteraction().setList(listofObjects)
。
这样做我正在调用异步任务,我正在传递此适配器
new ListAsync(activity,BaseAdapterExtention.this).execute();
并在onPostExecute()
我致电adapter.notifyDataSetChanged()
。但是适配器对象列表是相同的,删除没有反映在该列表中,因此list view
是相同的。
我在做什么错?
答案 0 :(得分:0)
在致电adapter.clear()
之前,请致电adapter.notifyDataSetChanged()
。
通过执行adapter.clear()
它会从适配器中删除所有元素,然后使用adapter.notifyDataSetChanged()
它通知附加的观察者基础数据已被更改,反映数据集的任何视图现在都将更新问题。
修改强>
当您延长BaseAdapter
时,.clear()
无法工作。您可以再次致电list2.setAdapter()
并传递null,如下所示:
list2.setAdapter(null);
adapter.notifyDataSetChanged();
答案 1 :(得分:0)
我在Activity中添加了一个包含ListView的公共方法,
public void notifyDataChangeInAdapter(){
list2.setAdapter(new BaseAdapterExtention(ExampleActivity.this, getApplication().getInteraction().getList() ));
}
我通过使用传递给asynctask构造函数的活动引用在onPostExecute()方法中调用此方法。