13

我有这个问题,我有

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

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

4

3 回答 3

18

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

            if (arrayAdapter == null) {
                arrayAdapter = new CustomArrayAdapter(getActivity(), data);
                listview.setAdapter(userAutoCompleteAdapter);
            } else {
                arrayAdapter.clear();
                arrayAdapter.addAll(newData);
                arrayAdapter.notifyDataSetChanged();
            }
于 2015-11-24T09:37:11.760 回答
12

假设 getNewData() 函数返回ArrayList<CustomItem>,您可以更改该行:

items=getNewData();

items.addAll(getNewData());

看看这是否有效?

于 2012-07-25T21:19:07.793 回答
0

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

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


就像这样:

personA:Activity类中的 ArrayList 对象

personB:Adapter类中的 ArrayList 对象

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


items您应该使用add(),或修改的数据remove(),而不是更改 的引用,然后调用.clear()addAll()itemsnotifyDataSetChanged()

于 2019-08-13T20:30:02.877 回答