2012-11-18 53 views
0

我遇到一个问题,当我调用adapter.notifyDataSetChange()刷新onResume()函数的listActifity时,它似乎无法从该函数的其他函数之后的活动。adapter.notifyDataSetChange()在onResume()调用后不起作用

我希望当用户单击后退按钮时(在另一个屏幕上)刷新列表(视图)并返回到带有列表的窗口。 我注意到的一件事是,当我从数组列表中更改其中一个对象时,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

使用“{}”为代码 –

+0

按钮作为一个说明大多数适配器'加()','中的addAll()'等方法调用'notifyDataSetChanged ()'给你。什么数据类型是“适配器”和“桶”? – Sam

+0

adapter是一个ExerciseBucketArrayAdapter,它扩展了ArrayAdapter ,bucket是一个ArrayList ,其中ExerciseBucket只是一个带有getters和setter的可序列化数据类。希望这可以帮助。 – user1325843

回答

1

使用:

buckets = lightWeightDAO.getExerciseBucketsByWorkoutId(workout.getId()); 
adapter.addAll(buckets); 

你只加入这个新buckets内容到适配器,你没有绑定适配器buckets。所以这个:

buckets.add(string); 
adapter.notifyDataSetChanged(); 

对适配器内部的数据没有影响。另外就像我在评论中提到的那样,您可以直接添加到适配器,它会为您拨打notifyDataSetChanged()。所以,简单地更换无处不在,你使用上面两行:

adapter.add(string); 
+0

谢谢山姆!这真的有帮助。 – user1325843