1 | aaaaa
2 | bbbbb
3 | ccccc
이렇게 되는데 2번을 지우고 다시 새로운 게시물을 작성하면
1 | aaaaa
2 | ccccc
3 | ddddd
가 됩니다.
하지만 db에서는 넘버가 시퀀스처럼 자동증가로 되어서
1 | aaaaa
3 | ccccc
4 | ddddd
2 | bbbbb
3 | ccccc
5 | bbbbb
6 | ccccc
그렇게 좋은 방법은 아니지만,
저 같은 경우.. 리스트의 값을 넣을 때 ArrayList나 배열을 만들지 않습니까?
그리고 그 값은 DB에서 가져오는 거구요.
값을 가져 올떄 DB의 ID, 즉 primary key를 저장 해 놓습니다.
이렇게 해놓을 경우 배열의 인덱스는 말그대로 리스트의 인덱스가 되고
그 배열 인덱스 안에 있는 ID값은 수정할 DB의 ID값이 되겠죠.
전 이런 식으로 리스트를 관리합니다만..^^;;
참조가 됐으면 좋겠네요 ㅎ
cursor.moveToPosition(position);
이렇게 하고 id 필드의 내용을 가져오시면 됩니다.
이후에 id를 조건으로 넣어서 delete하면 되겠죠.
해결 하셨나 모르겠습니다만,
아주 간단히 해결 할수 있습니다. 저도 같은 문제로 몇시간 동안 헤메다가 위의 정조님의 답변안에 숨어 있던 힌트를 얻어 해결했습니다.
테이블 생성할때 아마 INTEGER PRIMARY KEY AUTOINCREMENT 로 생성하셨을겁니다.
이부분에서 AUTOINCREMENT 를 삭제 하세요. 그럼 원하시는 결과를 얻을수 있습니다.
package com.sample;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;
public class Main extends Activity
implements OnItemClickListener{
// 이것이 DB의 ID가 되는 거죠.
Integer[] arrayID = {
3,6,7,10,12
};
private ListView listview;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listview = (ListView)findViewById(R.id.ListView01);
//DB의 ID가 포함되어 있는 배열이나 리스트를 세번째 인수에 넣어주세요.
listview.setAdapter(new ArrayAdapter<Integer>(
this
,android.R.layout.simple_list_item_1
,arrayID));
// 클릭 리스너 설정
listview.setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
// DB의 ID를 출력
Log.i("DEBUG","DB's ID ["+arg2+"]: "+arrayID[arg2]);
// 이 아이디 값을 가지고 삭제를 하면 될 듯 합니다.
}
}
간단한 소스 입니다 참고가 됐으면 좋겠네요.




질문하신 내용을 제가 잘 이해를 못하는건지...여하튼
방안 1 : 삭제 후 Re Query를 하여 새로운 값을 리스트에 반영
방안 2 : 시퀀스(자동증가) 사용 대신 Key 필드를 선언하여 사용
원하는 답변이 되었는지 모르겠네요^^