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

동적 생성한 뷰 관리 질문있어요

0 추천

 

이미지 주소 리스트를 받아와서,,

for문으로 주소 갯수만큼 ImageView 를 생성해 줍니다.

 

final int finalI = i;
addImage.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {

      imageList.removeView(v);
      pathList.remove(finalI);

   }
});

 

클릭시 삭제 되게 구현중인데,

이러한 상황이면 i가 final 이기 때문에 어레이리스트 내에서 삭제가 불가능합니다.

어떤식으로 해결할 수 있을까요

status (1,410 포인트) 님이 2017년 3월 29일 질문
ArrayList에서 특정 value 삭제하는거랑 위 코드에서 remove 인자로 들어가는 값이 final인거랑 무슨 상관이죠??;; 위에 코드만 봤을때는 문제 없는데요
final 이기 때문에,,  뒤에서부터 삭제하면 상관없지만 삭제한 사진 > 남은 사진이 되면 인덱스 에러를 뱉습니다...  어댑터 사용하여 새로 구현하였어요

2개의 답변

0 추천
전역변수로 만들면 final 이 아니어도 리스너 안에서 접근 가능합니다.
쎄미 (162,410 포인트) 님이 2017년 3월 30일 답변
for 문 내부의 listener 사용이라 전역변수를 사용하면 마지막 이미지로만 걸리는거 아닌가요?!?
0 추천
pathList.remove(v); 하시면 되지 않을까요?

인덱스 번호가 아닌 객체를 넣으셔도 동일 객체를 삭제합니다.

 

추가로 리스너는 하나만 만들어 놓고 생성시마다 달아주시면 메모리 절약에 도움이 됩니다.
바램 (19,650 포인트) 님이 2017년 3월 30일 답변
앗? v 집어넣어도 어레이리스트에서 삭제가 되나보군요 감사합니다. 결국엔 그냥 어댑터 만들어서 구현하였어요 ㅎ
...