2

我已经深入研究了 SO,但是,尽管我发现其他人向我提出了类似的问题,但我还没有找到一个可以解决我遇到的相同问题的问题。我也没有找到满意的答案。

我有一个列表视图。当我从适配器调用 .notifyDataSetChanged 时,ListView 会更新,但只有在调用 onResume() 后才能看到更新。换句话说,我不会立即看到它,只有在我离开活动并回来之后。

我该怎么做才能立即看到更新?我已经尝试过 .notifyDataSetChanged 方法,我尝试过重置适配器......没有任何效果。

4

1 回答 1

1

根据您的评论,您不会更新适配器中的数组,而是更新一次传递给适配器的活动所持有的数组。这就是适配器没有正确更新的原因。您正在更改适配器类之外的数组,这可能与您的适配器正在使用的数组对象不同。在 onResume() 处,您的适配器使用新数组重新创建并显示新内容。

一种解决方案是使用以下自定义适配器类:

class MyAdapter extends BaseAdapter {

    private Array[] myArray;

    public MyAdapter(Array[] myArray) {
        this.myArray = myArray;
    }

    public updateContent(Array[] myNewArray) {
        this.myArray = myNewArray;
        this.notifyDataSetChanged();
    }

    // your getItem, getView, and so on methods 
}

然后从您的活动中,使用您的新数组简单地调用 myArray.updateContent() ,它将立即更新。


在另一个类(活动)中保存和操作从一个类(适配器)使用的对象从来都不是一件好事。尝试将用于操作数组的所有代码移动到适配器中,并使用方法来添加/删除项目。这将使查找此类错误变得容易得多!

于 2013-08-15T15:15:02.483 回答