【问题标题】:Passing List of Objects (referenced) to BaseAdapter extended Class and call notifyDataSetChanged() not Working after changing reference将对象列表(引用)传递给 BaseAdapter 扩展类并调用 notifyDataSetChanged() 在更改引用后不起作用
【发布时间】:2014-09-07 21:02:52
【问题描述】:

我这样做是为了理解。就我而言,我有一个由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 是相同的。

我做错了什么?

【问题讨论】:

    标签: java android android-asynctask baseadapter


    【解决方案1】:

    在拨打adapter.notifyDataSetChanged()之前拨打adapter.clear()即可。

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

    编辑

    当您扩展 BaseAdapter 时,.clear() 将不起作用。因此您可以再次调用 list2.setAdapter() 并像这样传递 null:

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

    【讨论】:

    • 谢谢,我已经检查过了,BaseAdapter 扩展类没有名为“clear()”的方法定义
    • 好吧,你是对的。when a button is clicked, I am deleting that item 你实际上是如何删除的?通过在你的列表(项目)上调用.remove()
    • 获取绑定的对象信息(id)并在数据库中删除它,并从数据库中重新获取数据,然后将它们设置在单例引用中
    • 好的,如果我使用它,我将不得不将 list2 的引用传递给异步任务,如果它像这样工作,我会将它标记为正确答案。非常感谢
    • 是的,你需要这样做。我认为将 list2 后面的数据设置为 null 就可以了。试一试。
    【解决方案2】:

    我在具有 ListView 的 Activity 中添加了一个公共方法,

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-18
      • 2013-06-26
      • 1970-01-01
      • 1970-01-01
      • 2018-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多