一些其他項目。如果我從listView
假設item_no = 5
刪除一個項目,那麼一些其他項目會從數據庫中,其id
刪除是不 5.刪除項目將刪除SQLite數據庫
這裏是我的代碼。
我的數據庫類TRDBHelper.class
//Get single reminder
Cursor getReminder(int id){
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABLE_NAME, new String[]{COLUMN_ID, COLUMN_TITLE, COLUMN_DES,
COLUMN_DATE, COLUMN_TIME}, COLUMN_ID + "=?",
new String[]{String.valueOf(id)}, null, null, null, null);
if(cursor != null)
cursor.moveToFirst();
return cursor;
}
//Get all reminders
public List<TRListFormat> getAllReminders(){
List<TRListFormat> remList = new ArrayList<>();
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery("select * from " + TABLE_NAME, null);
if(cursor.moveToFirst()){
do {
TRListFormat format = new TRListFormat();
format.setId(Integer.parseInt(cursor.getString(0)));
format.setTitle(cursor.getString(1));
format.setDes(cursor.getString(2));
format.setDate(cursor.getString(3));
format.setTime(cursor.getString(4));
remList.add(format);
} while(cursor.moveToNext());
}
return remList;
}
//Delete single reminder
public void deleteReminder(int id){
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_NAME, COLUMN_ID + " = ?", new String[]{ String.valueOf(id)});
db.close();
}
我的列表視圖TRList.class
我使用SimpleAdapter
在ListView和TRListForamat
類具有所有getter和setter方法。當listView
項目被點擊
ListView lv;
SimpleAdapter adapter;
ArrayList<HashMap<String, String>> items;
List<TRListFormat> list;
TRDBHelper trDb;
public void refreshList() {
items = new ArrayList<>();
list = trDb.getAllReminders();
for (TRListFormat val : list) {
HashMap<String, String> map = new HashMap<>();
map.put("title", val.getTitle());
map.put("description", val.getDes());
map.put("date", val.getDate());
map.put("time", val.getTime());
items.add(map);
}
adapter = new SimpleAdapter(this, items, R.layout.tr_list_format,
new String[]{"title", "description", "date", "time"},
new int[]{R.id.tbr_title, R.id.tbr_des, R.id.tbr_date, R.id.tbr_time});
lv = (ListView) findViewById(R.id.tbr_list);
lv.setAdapter(adapter);
}
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
int remId = (int)id + 1; //id is a value from public void onItemClick(final AdapterView<?> adapterView, View view, final int position, final long id)
//I also tried using position instead of id but both gives same result
adapter.getItem(remId);
adapter.getClass();
Cursor rs = trDb.getReminder(remId);
String id = rs.getString(rs.getColumnIndex(TRDBHelper.COLUMN_ID));
String title = rs.getString(rs.getColumnIndex(TRDBHelper.COLUMN_TITLE));
trDb.deleteReminder(Integer.parseInt(id));
Toast.makeText(getApplicationContext(), "id: "+id+" title:"+title+" deleted", Toast.LENGTH_SHORT).show();
refreshList();
}
,彈出刪除按鈕被設置在AlertDialog
什麼變化,我需要從列表視圖和數據庫中刪除相同的項目呢?
是否可以用SimpleAdapter
或我需要使用SimpleCursorAdapter
?
'INT remId =(int)的ID + 1;'從你在哪裏得到'id'價值? – Ziem 2015-02-08 11:13:32
@Ziem謝謝你看看我的問題。 'id'是'onItemClickListener'的參數值。'公共無效onItemClick(最終AdapterView > adapterView,視圖視圖,最終詮釋位置,最終長ID)'我也嘗試使用'位置'而不是'ID'但都給出了相同的結果 – Apurva 2015-02-08 11:17:00
'onItemClickListener' ID參數不會給你一個除非你在你的適配器中實現'getItemId(int position)'。您可能需要擴展SimpleAdapter並重寫此方法。 – JonasCz 2015-02-08 11:25:46