【发布时间】:2012-11-18 21:08:46
【问题描述】:
我遇到了一个问题,当我调用 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() 时,一切似乎都正常工作(只需在更改数组列表后调用一个简单的 notifyDataSetChange())。
知道为什么这不起作用吗?
【问题讨论】:
-
对代码使用“{}”按钮
-
请注意,大多数适配器的
add()、addAll()等方法都会为您调用notifyDataSetChanged()。adapter和buckets是什么数据类型? -
adapter 是一个ExerciseBucketArrayAdapter,它扩展了ArrayAdapter
,buckets 是一个ArrayList 其中ExerciseBucket 只是一个带有getter 和setter 的可序列化数据类。希望这会有所帮助。 -
调用 super.onResume() 作为覆盖 onResume 中的第一个方法
-
如何在其他函数中添加数据:
buckets.add()或adapter.add()? (要回复特定用户,请使用@Sam,否则我可能不会注意到您回复了。)