更新Arrayadapter中的数据

时间:2012-07-25 21:15:20

标签: java android android-widget android-arrayadapter

我有这个问题,我有

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中看到新数据,我检查并且项目不会清空

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

3 个答案:

答案 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的地图。猜怎么着,屏幕上仍然显示美国地图。


您应该使用itemsadd()remove()clear()来修改addAll()',而不是更改items的引用。的数据,然后调用notifyDataSetChanged()