我已经深入挖掘了SO,但是,虽然我发现其他人也在问我类似的问题,但我还没有找到解决我遇到的问题的问题。我也没有找到令人满意的答案。
我有一个ListView。当我从适配器调用.notifyDataSetChanged时,ListView会更新,但我只能在调用onResume()时看到更新。换句话说,只有在我离开活动并复出之后,我才立即看到它。
如何立即查看更新?我尝试过.notifyDataSetChanged方法,我尝试重置适配器......没有用。
答案 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(),它将立即更新。
保持和操纵从另一个(活动)中的一个类(适配器)使用的对象永远不会好。尝试将用于操作数组的所有代码移动到适配器中,并使用方法添加/删除项目。这样可以更容易地发现这种错误!