我有这个问题,我有
private ArrayList<CustomItem> items;
private ArrayAdapter<CustomItem> arrayAdapter;
我显示项目中的数据,这个数据我在listview中看到,现在我想更新数据并查看这个新数据
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中看到新数据,我检查并且项目不会清空
我不知道错误在哪里,你能帮帮我吗? 最好的注册 安东尼奥
答案 0 :(得分:12)
假设getNewData()函数返回ArrayList<CustomItem>
,您可以更改该行:
items=getNewData();
到
items.addAll(getNewData());
看看是否有效?
答案 1 :(得分:12)
这是我用新数据更新适配器的方式:
if (arrayAdapter == null) {
arrayAdapter = new CustomArrayAdapter(getActivity(), data);
listview.setAdapter(userAutoCompleteAdapter);
} else {
arrayAdapter.clear();
arrayAdapter.addAll(newData);
arrayAdapter.notifyDataSetChanged();
}
答案 2 :(得分:0)
您在ArrayList
类中创建的Activity
是一个引用变量,它通过构造函数传递对ArrayList
类中的Adapter
的引用(初始化Adapter
对象时)。
但是,通过执行items = getNewData()
,您将为items
类中的Activity
分配新的引用,而Adapter
类中的引用保持不变,因此您在屏幕上看不到任何变化。
是这样的:
personA:活动类
中的ArrayList对象personB: Adapter 类
中的ArrayList对象PersonA和personB都分别持有美国地图,并且屏幕上显示了personB的地图。然后有人用另一个国家的地图替换了personA的地图。猜怎么着,屏幕上仍然显示美国地图。
您应该使用items
,add()
,remove()
或clear()
来修改addAll()
',而不是更改items
的引用。的数据,然后调用notifyDataSetChanged()
。