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

db연동한 listview에서 삭제 작업할 때..

0 추천

내부 db에 테이블을 하나 만들어서 listview와 연동했습니다.

데이터양은 최대 30개정도로 잡고있습니다.

맨 처음 데이터를 뿌려줄 때 db를 읽어와서 arraylist에 add하고, 

arraylist값을 어댑터를 이용해서 listview로 출력합니다.

추가까지는 무난한데..문제는 삭제할 때네요.

현재 arraylist의 사이즈를 체크해서 listview의 아이템을 추가할 때마다 arraylistsize번째의

방번호를 부여해서 0,1,2,3,...이런식으로 증가시킨 후, db에도 해당 방번호로 insert합니다.

0,1,2,3 번 방이 있다고 가정할 때, 1번방을 삭제하면 0,2,3번방이 남게 됩니다.

db쪽에도 0,2,3번으로 남게 되는데..이걸 0,1,2 로 재정렬한 후, 

다시 select해서 arraylist에 add하고 listview에 출력하려고 합니다.

이런경우 update문으로 방번호를 일괄적으로 0부터 for문으로 돌려서 수정해야하나요..?

어떤식으로 해야 효율?적으로 번호를 수정할 수 있을까요.

조언 부탁드립니다. 긴글 읽어주셔서 감사합니다^^

 

망고사탕 (5,000 포인트) 님이 2016년 6월 15일 질문

1개의 답변

+1 추천
 
채택된 답변
listview에서 데이터 삭제시 자동 정렬됩니다.

문제는 db상 데이터의 방번호 이겠군요.

반대로 생각해서 DB에 idx값 을 주고 삭제시 해당 idx값을 삭제하는 로직이

가장 무난해 보입니다.
익명사용자 님이 2016년 6월 16일 답변
망고사탕님이 2016년 6월 16일 채택됨
답변감사합니다.
현재 삭제하는 순서는 리스트뷰row선택-position확인-해당position의 db삭제-listview갱신. 이렇게 되어있는데요, 이렇게 하면 본문대로 db안에 구멍이 나게 됩니다. 하나 삭제할 때마다 db도 새로 갱신해야할까요?
리스트뷰에 추가할 아이템을 이렇게 가져온다면
select idx,content from items order by idx desc;

리스트뷰상에서 삭제시
customModel m = (customModel)listArray.get(position);
int idx = m.getIdx;

즉 해당 포지션 값의 idx값을 가져와서
db 삭제시 쓰면 되겠죠
idx값을 방번호로 잡지 마시고
자동증가값으로 잡고 쓰세요
설명감사합니다.
즉, 방번호가 아니라 고유의 index값인  pk(AUTOINCREMENT)으로 삭제하라는 말씀이신건가용..?
...