안드로이드 개발 질문/답변
(글 수 45,052)
리스트 뷰에 적용시킨 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;
혹시나해서 프로젝트 파일 올려봅니다. 조언 부탁드립니다.




위에서 말한 ID값과 Item의 포지션 값의 불일치 문제로 데이터값으로 제거하기로 했습니다.
제거 방법을 잘못 생각했나봅니다.