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

sqlite customlistview 삭제시 커서 질문!!

0 추천

제가 커스텀 리스트뷰를 sqlite로 연동해서 만들고 있는데요~

sql = "create table file2 ( _id integer primary key autoincrement,"

+ "FILENAME TEXT,"

+ "URL TEXT );";

Log.i("mylog", sql );

db.execSQL( sql );

이렇게 되면서 _id값이 하나씩 증가하잖아요?

근데 아래 코드가 삭제 코드거든요? 근데 이렇게 삭제하면 삭제는 되는데 리스트뷰가 삭제되면 _id값이 하나씩 줄어야 되는

데 그게 안되요 예를들어서 리스트뷰값이 5개가 있는데 그럼 리스트뷰제목이 1-5까지 잖아요 1을 지웠어요그럼 

2-5까지 남아요 그럼 2의 아이디는 _id=1이어야 되는데 여전히 2에요 그리고 리스트뷰를 추가를 하게되면 남아있는 값이 4

개니깐 5여야 되는데 _id=6이되어버립니다 이거 삭제해줄때 데이터를 위로 올려야 될꺼 같은데 제 머리로는 어제 하루종일

했는데 잘 안되네요 도움 좀 주세요 ㅜㅜ

public static void deleteFile( int position, FavoriteDBHelper dbHelper ){

 

ArrayList<FavoriteFile> list = null;

Cursor cs = null;

SQLiteDatabase db = dbHelper.getReadableDatabase();

list = new ArrayList<FavoriteFile>();

 

 

StringBuilder sql = new StringBuilder("DELETE FROM file2 WHERE _id="+(position+1)+";");

FavoriteActivity.arSrc.clear();

String sq = "SELECT * FROM file2";

cs = db.rawQuery( sq , null );

 

while (cs.moveToNext()) {

FavoriteFile item = new FavoriteFile( R.drawable.icon, cs.getString(1), cs.getString(2) + "" );

list.add(item);

}

 

FavoriteActivity.adapter.notifyDataSetChanged();

 

Log.i("mylog", sql.toString());

db.execSQL( sql.toString() );

 

db.close();

}

나는안드로오 (960 포인트) 님이 2014년 8월 13일 질문

1개의 답변

+1 추천
 
채택된 답변
id는 순서를 뜻하는게아니라 그냥 숫자가 1씩 올라가는 고정값이에요.

리스트 갯수가 100개까지 있는데 중간에 50을 잘라넀으면 id 50만 없어지고 나머지는 그대로일거에요.

id값은 최신정렬이나 사용할때 좋습니다.

position값으로 사용하시면 안되구요.

 

참고로 해당 row를 삭제하실려면 cursor.moveToPostion(position)으로 cursor를 이동해주시고

int id = cursor.getInt(0)을 해서 id값을 받아온다음 delete where _id = id를 해서 삭제하심됩니다.
기초개발자 (24,060 포인트) 님이 2014년 8월 13일 답변
나는안드로오님이 2014년 8월 13일 채택됨
지금 계속하고있는데요 커서를 포지션값으로 이동하려면 포지션 값을 받아올때도 포지션 값도 지워질때마다 빈자리를 채우지 않고 그대로 있어야 되는데 초기화 되지 않나요..?ㅠ
cursor.moveToPostion(position) 여기서 포지션 값을 받아올때 어플화면에 보여지는 포지션 값이라서 자꾸 이상한게 지워져요
예를들어서
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
어플 실행화면->'가나다라마바'삽입
SQliste 데이터->'가나다라마바'삽입
어플화면에서 '가나다'삭제
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
어플 실행화면->'라마바'
SQliste 데이터->'          라마바'
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
이렇게 되어버려서 포지션 값을 '라를'지워줄때 포지션이 1이 넘어와서요  아무것도 안지워 집니다 ㅜㅜ
어떻게 해야 하나요 ㅜㅠㅠㅠㅠ
해결했어요!!!!
감사합니다~님 짱!
간결한 답변 잘 보았습니다.
감사합니다.
...