我遇到一个问题,当我调用adapter.notifyDataSetChange()
从onResume()
函数刷新listActifity时,它似乎不会从该活动的任何其他函数开始工作。
我希望在用户单击后退按钮时(在另一个屏幕上时)刷新列表(视图)并返回到包含列表的窗口。
我注意到的一件事是当我从数组列表中更改其中一个对象时notifyDataSetChange()
(从其他函数)工作,但是当我想要从ArrayList
添加或删除对象时则不行。到目前为止,这一直对我有用,但我不想每次都要重新查询列表。
@Override
protected void onResume() {
lightWeightDAO.open(); //db connection
adapter.clear();
buckets = lightWeightDAO.getExerciseBucketsByWorkoutId(workout.getId());
adapter.addAll(buckets);
adapter.notifyDataSetChanged();
super.onResume();
}
当我从onResume()中删除notifyDataSetChange()时,一切似乎都有效(在更改arraylist后只调用一个简单的notifyDataSetChange())。
知道为什么这不起作用吗?
答案 0 :(得分:1)
使用:
buckets = lightWeightDAO.getExerciseBucketsByWorkoutId(workout.getId());
adapter.addAll(buckets);
您只有将这个新buckets
的内容添加到适配器,您没有将适配器绑定到buckets
。所以这个:
buckets.add(string);
adapter.notifyDataSetChanged();
对适配器内的数据没有影响。也就像我在评论中提到的那样,您可以直接添加到适配器,它会为您调用notifyDataSetChanged()
。因此,只需将上面两行使用的地方替换为:
adapter.add(string);