본문 바로가기
호구지책/Java/Android

[안드로이드] ArrayList 에서 remove 사용 시 에러 발생

by 하늘의흐름 2016. 7. 5.
반응형

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 클래스를 활용해야 겠다.



참고


자바프로그래머가 자주 실수하는 10가지

http://stackoverflow.com/questions/10714233/remove-item-from-arraylist

반응형

댓글