将对象列表(引用)传递给BaseAdapter扩展类并在更改引用后调用notifyDataSetChanged()不工作

时间:2014-09-07 21:02:53

标签: java android android-asynctask baseadapter

我这样做是为了理解。在我的情况下,我有一个由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是相同的。

我在做什么错?

2 个答案:

答案 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()方法中调用此方法。