实时更新ListView

时间:2013-08-15 14:52:52

标签: android listview adapter notifydatasetchanged

我已经深入挖掘了SO,但是,虽然我发现其他人也在问我类似的问题,但我还没有找到解决我遇到的问题的问题。我也没有找到令人满意的答案。

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

如何立即查看更新?我尝试过.notifyDataSetChanged方法,我尝试重置适配器......没有用。

1 个答案:

答案 0 :(得分: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(),它将立即更新。


保持和操纵从另一个(活动)中的一个类(适配器)使用的对象永远不会好。尝试将用于操作数组的所有代码移动到适配器中,并使用方法添加/删除项目。这样可以更容易地发现这种错误!