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

[재질문]리스트뷰 포지션값에 대해..

0 추천

안녕하세요. 커스텀리스트뷰로 카카오톡이나 라인과같이 메신저 형식의 채팅 레이아웃을 구현 중입니다.

일단 전체적인 레이아웃은 잡았는데.. 대화내용을 롱클릭 즉, 리스트뷰의 아이템 롱클릭을 했을 때 삭제하려고 하는데..
롱클릭할 때 포지션 값을 제대로 받고싶습니다.
리스트뷰.png

 
 
1.onCreate에서 내부DB에 저장했던 데이터들을 읽어옵니다. 
2.DB는 num(pk/autoincrement),대화내용(text),날짜(text),시간(text)로 구성되어있습니다.
3.DB를 처음부터 끝까지 조회하다가 중간에 다른 날짜 즉,
  2/안녕하세요/2015.01.01
  3/하이/2015.01.03 
  이렇게 날짜를 조회해서 그 다음 데이터의 날짜값이 앞과 다른 경우 날짜 타이틀을 추가합니다.
  data2 = new ExamData((int) 1, cursor.getString(3), null,null);
  m_adapter.add(data2);
 
대화내용과 날짜타이틀은 레이아웃이 다르기 때문에, 둘을 구분할수 있는 타입을 지정해서 
0일 때엔 대화레이아웃/1일 땐 날짜레이아웃을 지정해서 추가합니다.
이렇게 날짜 타이틀도 리스트뷰에 포함 되다보니, 대화내용을 삭제할 때의 문제가 발생합니다.
DB에는 대화 내역만 들어가있습니다.
0/안녕/날짜
1/응/날짜
2/잘지내?/날짜
이런식인데..
리스트뷰에서 삭제할 때 롱클릭으로 해당 포지션값을 받아서 num값으로 조회해 삭제하려고했는데..
날짜 타이틀이 중간에 포함되다보면
 
---2015/01/01---
0/안녕/2015/01/01
---2015/01/02---
1/응/2015/01/02
2/잘지내?/2015/01/02
 
이렇게 되는데요. DB상에선 0번이었던 녀석이 1번 포지션값을 갖게 되고...날짜 타이틀이
중간중간 포함될때마다 포지션값이 변화해서 어떤식으로 값을 받아와야 하는지 모르겠습니다.
 
짧은 조언이라도 주시면 감사하겠습니다 좋은하루 보내세요
 
 
 
 
 
anci (19,950 포인트) 님이 2015년 4월 10일 질문

2개의 답변

+1 추천
대화내용 view에 setTag로 db의 row id를 저장하고, 롱클릭했을 때 getTag로 그 값을 꺼내서 사용하세요.
익명사용자 님이 2015년 4월 10일 답변
0 추천
저라면 리스트뷰가 아니라 scroll view에 custom view를 넣어서 쓸 것 같아요
쎄미 (162,410 포인트) 님이 2015년 4월 10일 답변
...