마스터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일 채택됨
아, 그렇군요. 해당위치의 데이터 삭제로 인한 후열이 당겨지는 걸 잊어먹고 있었네요.

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