2012-11-14 3 views
1

안녕 얘들 아 데이터베이스의 문자열 열에서 만든 목록 메뉴가 있습니다. 사용자가 목록 메뉴 항목을 클릭하면 목록 메뉴 항목이 삭제됩니다. 내 DBAdapter 삭제 기능에 목록 항목 위치를 전달하여이 일을 해요.목록 메뉴에서 android sqlite 삭제

protected void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 
    db.deleteContact(position); 
    } 

이 함수는 해당 행 인덱스를 찾아 삭제합니다. (당신의 대부분 아마 매우 분명하다)

문제는 사용자가 삭제할 때, 목록 메뉴 항목 2를 말할 수 및 해당 인덱스가 테이블 목록 메뉴 새로 고침과에서 삭제된다는 점이다 이전에 위치 3에 있던 항목이 현재 위치 2에 있습니다. 사용자가 삭제하려고하면 삭제 기능은 "2"를 매개 변수로 받지만 삭제할 행의 인덱스는 3입니다.

어리석은 문제지만 누군가 효과적인 대안을 제시 할 수 있습니까? 감사합니다

+0

문제점을 이해하지 못합니다. 너 무슨 일이 일어날거야? 귀하의 항목은 데이터베이스에서 삭제되었지만 목록보기에서는 삭제되지 않았습니까? 또한 delete 메소드가'long id'를 기반으로 삭제할 때, 왜 당신의 메소드에'int position'을 넘겨 줄 것인가? – mango

+0

5 행이 있고 그것을 삭제하려면 가운데 하나를 클릭하면 잘 작동합니다. 그러나 항목이 삭제됨에 따라 범위는 항상 1-5, 1-4, 1-3 사이가되도록 목록이 새로 고쳐집니다. 그게 다 잘 됐어. 그러나 행의 색인은 동일하게 유지됩니다. 즉 행 3을 삭제하면 1,2,4,5가 남지만 사용자는 행 3에 대한 요청을 제출하여 삭제할 항목의 3 번째 항목을 클릭합니다. 갱신 된리스트 그래서 아무 일도 일어나지 않습니다. – shanahobo86

답변

2

위치별로 삭제하지 마십시오. onListClickItem 방법에 제공된 id 방법이 도움이됩니다. 위 코드를 다음으로 바꿉니다 :

protected void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 
    db.deleteContact(id); 
    } 

단, KEY_NAME이 테이블의 기본 키인 경우. 그렇지 않은 경우 KEY_NAME을 기본 키 필드의 이름으로 바꾸십시오.

+0

그건 완벽하게 이해할 수 있습니다! 나는 그것을 시도 할 것이다. 감사합니다 편집 : Worked, 도와 주셔서 대단히 감사합니다. – shanahobo86

+0

참고 : ListAdapter 및 유효한 커서를 사용하여 목록을 채우는 방법에 대한 표준 안드로이드 설명서를 따르면 예상대로 작동합니다. – JScoobyCed

+0

+1 좋은 답변입니다. –