今天在寫程序時遇到一個很容易犯錯的問題,下面記錄一下,首先看代碼:
<span style="font-size:12px;">private void loadData() {
Map<String, Object> contentMap = null;
classroomListItems.clear(); // classroomListItems = new ArrayList<List<Map<String, Object>>>();
for(String key : MainActivity.classroomMap.keySet()) {
contentListItems.clear(); // contentListItems = new ArrayList< Map<String, Object> >();
for(int j = 0; j < MainActivity.classroomMap.get(key).size(); ++j) {
contentMap = new HashMap<String, Object>();
contentMap.put("courseTime", MainActivity.classroomMap.get(key).get(j).getStarttime().substring(11, 16) + "-"
+ MainActivity.classroomMap.get(key).get(j).getEndtime().substring(11, 16));
contentMap.put("courseName", MainActivity.classroomMap.get(key).get(j).getCourse_name());
contentMap.put("classroomName", MainActivity.classroomMap.get(key).get(j).getClassroom_name());
contentListItems.add(contentMap);
}
classroomListItems.add(contentListItems);
Log.e("contentListItems", contentListItems.get(0).get("classroomName").toString());
}
for(List<Map<String, Object>> list : classroomListItems) {
Log.e("classroomListItems", list.get(0).get("classroomName").toString());
}
if (null == adapter) {
adapter = new ClassroomAdapter(ctx, contentListItems, classroomListItems); // 創建適配器
listView.setAdapter(adapter);
} else {
adapter.refresh(classroomListItems);
}
}</span>
上述代碼存在一個問題,當我運行的時候,classroomListItems的size是正常的,而其中的元素卻全部都是最後添加進去的contentListItems,也就是說每次添加contentListItems時覆蓋了前面的數據。
當然,問題的原因也很簡單:
在我循環添加數據的時候,我只聲明瞭一次contentListItems,也就是隻有一個contentListItems這個List,這樣我每次寫入Map數據的List都是同一個List,所以當我把這個List添加進classroomListItems時,添加的本質是contentListItems的地址,所以每次都是同一個contentListItems,這樣後面的數據就覆蓋了前面的數據。
解決方法就是每次都生成一個List:
for(String key : MainActivity.classroomMap.keySet()) {
contentListItems = new ArrayList< Map<String, Object> >();
contentListItems.clear();
....
}
問題很簡單,只是我自己太粗心了