更新 Arrayadapter 中的数据

Posted

技术标签:

【中文标题】更新 Arrayadapter 中的数据【英文标题】:Update data in Arrayadapter 【发布时间】:2012-07-24 10:01:14 【问题描述】:

我有这个问题,我有

private ArrayList<CustomItem> items; 
private ArrayAdapter<CustomItem> arrayAdapter;

我显示项目中存在的数据,这个数据我在列表视图中看到,现在我想更新数据并查看这个新数据

if (!items.isEmpty()) 
    items.clear(); // i clear all data
    arrayAdapter.notifyDataSetChanged(); // first change
    items = getNewData();// insert new data and work well
    arrayAdapter.notifyDataSetChanged();  // second change                                      

在第一次更改中,我看到数据已被清理,但在第二次更改中,我在 listview 中看不到新数据,我检查并且项目不为空

我不知道错误在哪里,你能帮我吗? 最好的问候 安东尼奥

【问题讨论】:

您确定getNewData() 正在返回一个包含某些内容的列表吗? 请发布getNewData(),最后只需要调用arrayAdapter.notifyDataSetChanged();一次。 【参考方案1】:

这就是我用新数据更新适配器的方式:

            if (arrayAdapter == null) 
                arrayAdapter = new CustomArrayAdapter(getActivity(), data);
                listview.setAdapter(userAutoCompleteAdapter);
             else 
                arrayAdapter.clear();
                arrayAdapter.addAll(newData);
                arrayAdapter.notifyDataSetChanged();
            

【讨论】:

ArrayAdapter.addAll() 已经调用 notifyDataSetChanged()。所以你实际上在这里调用了两次 notifyDataSetChanged()。【参考方案2】:

假设getNewData()函数返回ArrayList&lt;CustomItem&gt;,你能不能换行:

items=getNewData();

items.addAll(getNewData());

看看这是否有效?

【讨论】:

【参考方案3】:

您在Activity 类中创建的ArrayList 是一个引用变量,它通过构造函数传递对Adapter 类中的ArrayList 的相同引用(当您初始化Adapter 对象时) )。

但是,通过执行items = getNewData(),您在Activity 类中为items 分配了一个新引用,Adapter 类中的引用保持不变,因此您在屏幕上看不到任何变化.


是这样的:

personA:Activity类中的ArrayList对象

personB:Adapter类中的ArrayList对象

PersonA 和 personB 他们都拿着一张美国地图(分别),屏幕上显示的是 personB 的地图。然后有人用另一个国家的地图替换了personA的地图。猜猜看,屏幕仍然显示美国地图。


不要改变items的引用,你应该使用add()remove()clear()addAll()来修改items的数据然后调用notifyDataSetChanged()

【讨论】:

以上是关于更新 Arrayadapter 中的数据的主要内容,如果未能解决你的问题,请参考以下文章

从ArrayAdapter每毫秒更新Android ListView中的一行

根据微调器项目选择更新 ArrayAdapter

ArrayAdapter 的应用程序崩溃,因为 Array 为空

将数据填充到 Listview 但 Arrayadapter 不工作

ArrayAdapter.NotifyDataSetChanged() 不工作?

ArrayAdapter 适配 Spinner