리스트 뷰에 적용시킨 DB의 id 값 가져오는 방벙을 알고싶습니다.

 

현제 리스트 뷰에 DB를 저장해 놨습니다. 추가 제거가 가능하게 하려고하는데

추가는 문제 없이 되는데 ... 수정과 제거가 문제인거 같습니다.

 

소스는 리스트뷰를 OnItemClickListener 로 선택되면 다이얼로그로 수정/제거 이렇게 두개의 버튼이 나옵니다.

기능으로 들어가서 제거와 수정에서 id값으로 처리를 해야하는데 ..

 

처음에는 OnItemClickListener 의 선택된 포지션값을 이용해서 db를 제거했는데 .. 문제가 생기더군요 ..

db는 이번에 시작해서 구조를 잘 몰라서 추측한것이 ,

 

ArrayList는 추가와 제거가 이루어지면 중간에 생기는 공백을 다음것으로 대체해서

새로운 ArrayList를 만들어 보여주는걸로 알고있는데 .. 

db는 생성되면서 얻게되는 id값이 db 고유의 값이 되는거 같습니다.

그래서 1 / 2 / 3 / 4 / 5 중 3이 제거되면 1 / 2 / null / 4 / 5 가되는것 으로 생각됩니다. ( 잘못된 추측이라면 조언 부탁드립니다. ㅠㅠ )

 

### 소스에서 db id값을 가져오는 법 조언 부탁드립니다. ..

 

public class Alarm_main extends Activity implements OnClickListener,
  android.content.DialogInterface.OnClickListener {
 private DB_DataBase_Helper DBHelper;
 private Cursor DBCursor;
 private DB_InfoClass DBInfo;
 private ArrayList<DB_InfoClass> DBArray;
 private LV_CustomAdapter DBAdapter;
 private Button main_add;
 private Button main_set;
 private ListView main_list;
 int posi;
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  setLayout();
  main_list.setOnItemClickListener(new OnItemClickListener() {
   @Override
   public void onItemClick(AdapterView<?> parent, View view,
     int position, long l_position) {
    new AlertDialog.Builder(Alarm_main.this).setMessage("선택")
      .setNeutralButton("수정", Alarm_main.this)
      .setPositiveButton("제거", Alarm_main.this).show();
    posi = position;
   }
  });
  DBHelper = new DB_DataBase_Helper(this);
  DBHelper.open();
  DBArray = new ArrayList<DB_InfoClass>();
  doWhileCursorToArray();
  DBAdapter = new LV_CustomAdapter(this, DBArray);
  main_list.setAdapter(DBAdapter);
 }
 @Override
 protected void onDestroy() {
  DBHelper.close();
  super.onDestroy();
 }
 private void doWhileCursorToArray() {
  DBCursor = null;
  DBCursor = DBHelper.getAllColumns();
  while (DBCursor.moveToNext()) {
   DBInfo = new DB_InfoClass(DBCursor.getInt(DBCursor
     .getColumnIndex("_id")), DBCursor.getString(DBCursor
     .getColumnIndex("time_h")), DBCursor.getString(DBCursor
     .getColumnIndex("time_m")), DBCursor.getString(DBCursor
     .getColumnIndex("content")));
   DBArray.add(DBInfo);
  }
  DBCursor.close();
 }
 @Override
 public void onClick(View v) {
  switch (v.getId()) {
  case R.id.main_add:
   Intent time = new Intent(this, Alarm_Time.class);
   time.putExtra("ADD", 1);
   startActivity(time);
   break;
  case R.id.main_set:
   Intent set_go = new Intent(this, Alarm_set.class);
   startActivity(set_go);
   break;
  }
 }
 private void setLayout() {
  main_list = (ListView) findViewById(R.id.listView);
  main_add = (Button) findViewById(R.id.main_add);
  main_set = (Button) findViewById(R.id.main_set);
  main_add.setOnClickListener(this);
  main_set.setOnClickListener(this);
 }
 @Override
 public void onClick(DialogInterface dialog, int which) {
  switch (which) {
  case DialogInterface.BUTTON_POSITIVE:
   if () {
    DBHelper.deleteColumn();
    DBArray.remove(posi);
    DBAdapter.setArrayList(DBArray);
    DBAdapter.notifyDataSetChanged();
   } else {
    Toast.makeText(getApplicationContext(), "잘못함.",
      Toast.LENGTH_LONG).show();
   }
   break;
  case DialogInterface.BUTTON_NEUTRAL:
   Intent time = new Intent(this, Alarm_Time.class);
   time.putExtra("UPDATE", 2);
   startActivity(time);
   break;
  default:
   break;
  }
 }
}

 

문제의 부분입니다.

  @Override
 public void onClick(DialogInterface dialog, int which) {
  switch (which) {
  case DialogInterface.BUTTON_POSITIVE:
   if ( ) {
    DBHelper.deleteColumn();
    DBArray.remove(posi);
    DBAdapter.setArrayList(DBArray);
    DBAdapter.notifyDataSetChanged();
   } else {
    Toast.makeText(getApplicationContext(), "잘못함.",
      Toast.LENGTH_LONG).show();
   }
   break;


혹시나해서 프로젝트 파일 올려봅니다. 조언 부탁드립니다.