List add 방법 으로 데 이 터 를 추가 할 때 덮어 쓰기 문제

2369 단어 자바/Android
오늘 프로그램 을 쓸 때 실수 하기 쉬 운 문제 에 부 딪 혔 습 니 다.다음은 기록 하 겠 습 니 다.먼저 코드 를 보 겠 습 니 다.
private void loadData() {
	
	Map contentMap = null;
	
	classroomListItems.clear();			// classroomListItems = new ArrayList>>();
	
	for(String key : MainActivity.classroomMap.keySet()) {

		contentListItems.clear();		// contentListItems = new ArrayList< Map >();
		
		for(int j = 0; j < MainActivity.classroomMap.get(key).size(); ++j) {
			contentMap = new HashMap();
			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> 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);
	}
}

위 코드 에 문제 가 있 습 니 다.제 가 실 행 했 을 때 classroom ListItems 의 size 는 정상 적 이 고 그 중의 요 소 는 모두 마지막 에 추 가 된 contentListItems 입 니 다.즉,contentListItems 를 추가 할 때마다
앞의 데 이 터 를 덮어 썼 습 니 다.
물론 문제 의 원인 도 간단 하 다.
내 가 반복 해서 데 이 터 를 추가 할 때,나 는 단지 한 번 의 contentListItems,즉 하나의 contentListItems 라 는 List 만 밝 혔 다.그러면 내 가 Map 데 이 터 를 기록 할 때마다 List 는 같은 List 이다.그래서 내 가 이 List 를 classroom ListItems 에 추가 할 때,추 가 된 본 질 은 contentListItems 의 주소 이기 때문에 매번 같은 contentListItems 이다.이렇게 하면 뒤의 데 이 터 는 앞의 데 이 터 를 덮어 씁 니 다.
해결 방법 은 매번 하나의 List 를 만 드 는 것 이다.
for(String key : MainActivity.classroomMap.keySet()) {
contentListItems = new ArrayList< Map >();
contentListItems.clear();
....
}

문 제 는 매우 간단 하지만,나 자신 이 너무 부주의 할 뿐이다.

좋은 웹페이지 즐겨찾기