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

listview의 항목 삭제.. [closed]

0 추천
public void onClick(DialogInterface dialog, int which) 
{
  for(int i=0; i<arrList.size(); i++)
  {
    test = (RelativeLayout) listView.getChildAt(i);
    check = (CheckBox) test.getChildAt(1);
    if(check.isChecked())
    {
      String delstr = arrList.get(i);
     
      arrList.remove(arrList.get(i));
    }
  }
  adapter.notifyDataSetChanged();
}

 

위와 같은 식으로 체크박스로 선택한 항목을 적어도 한개, 많으면 여러개를 삭제하려고 합니다.

이전에도 도움글을 올렸는데 해답이 나오지 않아서 다시 여쭤봅니다.ㅠㅠ..

해당 배열사이즈 arrList.size()만큼 for문을 실행하면서, if문에서 check된 항목들만 arrList.get으로 잡아서

삭제하는 것인데요.. 문제는 삭제하고 싶은 항목을 체크하고 삭제해도 일부분이 삭제가 안됩니다.

김철수 축구

김영희 탁구

박미미 농구

이영수 야구 

이런식으로 4명의 회원이 있는데요, 배열크기는 4이고, [0],[1],[2],[3]에 각각 데이터가 들어있는 건데,

저 네명을 모두 지우려고 체크박스 네개를 누르고 삭제를 하면 [1],[3]번의 데이터인 김영희 탁구, 이영수 야구는

지워지지 않습니다.. 어느쪽에서 잘못된건지 정확하게 문제점을 모르겠네요..ㅠㅠ 

 

질문을 종료한 이유: 답찾았습니당^^
anci (19,950 포인트) 님이 2014년 3월 17일 질문
anci님이 2014년 3월 17일 closed
밑의 분들 말씀대로..반대로 삭제를 해야한다네요..구글링하다가 참고한 for문으로 수정하니 삭제가 정상적으로 되네요.
for(int i=arrList.size()-1; i>=0; i--)  이렇게 수정했습니다..
어떻게 삭제 되는지 좀 공부해야겠습니다. 도움주신 건방진프로그래머님/ThisPlus님 감사합니다.

1개의 답변

+2 추천
 
채택된 답변
어레이리스트 구조를 잘생각해보시길  0 1 2 3 가 있는데

포문을 돌아서 삭제한다치면 첫번째 i번(0)이 지워질경우 1 2 3이 남고

이때 i값은 1이됨 그런 다음 지워질 아이템은 2가되서 1 3이남음

그리고 i값은 2가됨 그럼 1 3이 남았으므로 2번째 배열에는 값이 없으므로 그냥 널 포인트 익쎕션일어남

근데 에러안나는게 신기하네요 ?
건방진프로그래머 (26,630 포인트) 님이 2014년 3월 17일 답변
anci님이 2014년 3월 17일 채택됨
여담이지만 이러한 문제 때문에 어레이리스트 삭제는 반대로 거꾸로 오면서 삭제 합니다~~!
처음 for문을 실행할 때 i=0/size=4 이고..
0번배열이 지워진다음 for문으로 다시 올라갈 때, i++로 i는=1,0번배열이 지워지니 배열size는 3이 되는건가요?
i=1/size=3 이런식으로..그다음 지워질 아이템이 2가 된다는데,
String delstr = arrList.get(i);면 i는 1이니 1이 되는게 아닌가요?..이해가 잘 안가서요(__); 아, 잊을뻔했네요. 답변 감사합니다..!!
...