2012-11-18 49 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