반응형
android
상황
리스트 뷰에서 특정 아이템에 체크하게 되면
해당 아이템을 삭제하고 다시 for문을 실행하는 코드가
있었다.
그런데 다시 for문을 실행하는 순간
프로그램이 outboundexception을
뱉어내며 종료되어 버렸다.
과정
remove를 이용해 단순히 아이템 하나를 지웠을 때는 문제가 없었다.
문제는 지우고 나서 다시 for문을 돌릴 때 발생했다.
ArrayList에서 remove를 하는 방식에 뭔가 문제가 있음을 알게 되었다.
구글링을 통해서 배열의 삭제는 remove가 아니라 iterator를 이용하라는
것을 알게 되었다.
해결
코드를 다음과 같이 변경했다..
//mAdapter.listViewItemList.remove(i); //특정아이템의 제거 Iterator<CartListItem> iter = mAdapter.listViewItemList.iterator(); while(iter.hasNext()){ CartListItem item = iter.next(); if(item.getChecked()){ iter.remove(); } }
Iterator 객체를 만들어서 hasNext()로 값을 체크한다.
값이 있다면 hasNext()는 true를 리턴한다.
이후 데이터 객체인 CartListItem 에 next() 메서드를 사용해서
값을 대입한다.
해당 객체에는 체크값이 들어가 있다.
체크가 되어 있는 것들만 삭제가 되어야 하므로,
체크값을 검사한 뒤, remove() 메서드로 삭제처리 하였다.
iterator 객체를 사용할 때는 hasNext()로 체크한 뒤에
next()로 값을 뽑아낼 수 있다.
결론
앞으로 배열의 삭제를 진행할 때는 Iterator 클래스를 활용해야 겠다.
참고
http://stackoverflow.com/questions/10714233/remove-item-from-arraylist
반응형
'호구지책 > Java/Android ' 카테고리의 다른 글
[안드로이드] 모듈 추가 후 아이콘이 두개씩 만들어질 때 (0) | 2016.09.07 |
---|---|
[안드로이드] manifest 네임스페이스 (0) | 2016.09.05 |
[자바] The method readLine() from the type DataInputStream is deprecated (0) | 2016.07.21 |
[자바] 숫자 세자리 콤마 (0) | 2016.07.06 |
[java] NoRouteToHost 호스트로 갈 루트가 없음 에러 (0) | 2016.06.15 |
[안드로이드] dp 를 px 변환하기 (0) | 2016.06.13 |
[안드로이드] 이클립스 실행오류 (0) | 2016.05.19 |
[안드로이드] 옵션 메뉴 처리하기 (0) | 2015.12.01 |
댓글