更新 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<CustomItem>
,你能不能换行:
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 的应用程序崩溃,因为 Array 为空
将数据填充到 Listview 但 Arrayadapter 不工作