0

我遇到了一个问题,当我调用adapter.notifyDataSetChange()以从函数刷新 listActifity 时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() 时,一切似乎都正常工作(只是在更改数组列表后调用一个简单的 notifyDataSetChange())。

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

4

1 回答 1

1

通过使用:

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

您只是将这个 new 的内容添加buckets到适配器中,您没有将适配器绑定buckets. 所以这:

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

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

adapter.add(string);
于 2012-11-19T06:42:08.627 回答