마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

파일이 절반만 삭제가 됩니다 -_-;;

0 추천

정말 미치겠네요. 이것 때문에 이틀을 허송세월로 보냈네요.

커스텀 리스트뷰 관련 문제인데요,

리스트뷰에서 아이탬을 클릭하면 체크가 되도록 하였고, 

Array_Data.get(i).getIsChecked() 로 체크된 상태를 확인할 수 있도록 되어 있습니다.

주석에 표시된 문제의 블럭을 삭제하면 리스트뷰에서 체크된 수 만큼 로그가 찍히나,

살려두면 체크된 수의 절반만 로그가 찍히네요.

당연히 체크된 리스트의 절반만 삭제가 되고, 파일도 절반만 삭제가 되요.

 

도저히 뭐가 문제인지 몰라서 여기에 도움을 청합니다.

이런 에러는 제 상상력 밖이라서 ㅡ ㅡ;;

혹시 이런 유형의 문제를 해결할 팁이나 경험이라도 좋으니 좀 기술해주시면 좋겠습니다.

 

case R.id.menu_call_delete_selected_file:
	if(SelectModeOn == true){
	// ERROR : 다수의 파일을 선택했을 때 모두 한번에 지워지지 않는다.
	
	
	for(int i = 0; i < Array_Data.size(); i++){
		if(Array_Data.get(i).getIsChecked()){
			
			Log.i("callActivity", "checked true : " 
				+ sdPath + Array_Data.get(i).getFullName());
			// 조온나 희한한게 아래에 문제의 블럭 부분을 주석처리하면 바로 위에
			// 로그는 Array_Data.get(i).getIsChecked()의 반환값으로 인해 리스트뷰에서 체크된 수 만큼
			// 찍히는데, 문제의 블럭을 살려두면 체크된 수의 절반만 로그가 찍히고 
			// 절반만 삭제가 된다.

			// 즉, 쉽게 말해서 Array_Data.get(i).getIsChecked()로 인한 반환값이 10이라고 가정할때,
			// 아래의 문제블럭을 주석처리하면 위의 로그는 10개가 찍히나,
			// 지금처럼 살려두면 5개만 찍히고 5개만 삭제가 된다.

			// 참고용 데이터
			// ArrayList<custom> Array_Data
			
			
			// 문제의 블럭 시작
			File beDelete = new File(sdPath + "/" + Array_Data.get(i).getFullName());			
			beDelete.delete();
			delListItem(i);	// 리스트뷰에서 아이템 제거 및 뷰 갱신 메소드		
			beDelete = null;
			// 문제의 블럭 끝						
		}
	}
}
return true;

 

컴맹탈출 (280 포인트) 님이 2013년 3월 17일 질문
사족을 몇개 붙이자면... 파일삭제하기전에는
파일이존재하는지 체크하고 삭제하시는게 좋습니다(없을경우도 있을지
모르니까요)
넵. 그렇게 수정하도록 하겠습니다.
답글 감사드립니다 (__)

1개의 답변

+1 추천
 
채택된 답변
i 번 자료를 삭제하면 i+1 자료가 i 위치로 이동하죠.

그 다음은 i++ 되어 i+1 (예전 i+2 자료) 가 삭제되고..

쉽게 하시려면 for 문을 거꾸로 돌리세요.

for (int i=Array_Data.size()-1; 0<=i; i--)
JINASYS (5,630 포인트) 님이 2013년 3월 17일 답변
컴맹탈출님이 2013년 3월 17일 채택됨
아, 그렇군요. 해당위치의 데이터 삭제로 인한 후열이 당겨지는 걸 잊어먹고 있었네요.

바로 해결되었습니다. 정말 감사드립니다. (__)
...