从onResume()调用后,adapter.notifyDataSetChanged()无法正常工作

时间:2012-11-18 21:08:46

标签: android android-adapter

我遇到一个问题,当我调用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())。

知道为什么这不起作用吗?

1 个答案:

答案 0 :(得分:1)

使用:

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

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

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

对适配器内的数据没有影响。也就像我在评论中提到的那样,您可以直接添加到适配器,它会为您调用notifyDataSetChanged()。因此,只需将上面两行使用的地方替换为:

adapter.add(string);