我有一個列表視圖,它由SimpleCursorAdapter
填充,它將數據綁定到來自sqlite數據庫的遊標視圖。我想要一個上下文菜單選項來刪除一個列表項,當它被長時間按下時,所以我通過調用registerForContextMenu(historyListView)
來註冊一個上下文菜單的ListView。我試圖通過在OnCreateContextMenu
中獲取行標識並將其存儲爲專用字段lastSelectedId
來刪除數據庫中的行,然後如果在OnContextItemSelected
中選擇刪除上下文項,請通過檢查_id
列對lastSelectedId
。從列表視圖中使用_id列從上下文菜單中刪除行
這不起作用。
所以 - (1)在該行由
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
lastSelectedId = info.id;
一樣在數據庫中的_id欄中給出?
和(2.)如果不是,我該如何刪除基於數據庫中該行的_id
的onContextItemSelected()
中的項目?
編輯:很抱歉沒有解釋爲什麼這種方法是行不通的更深入:什麼情況是,當我嘗試刪除該行沒有任何反應:我叫mDB.delete(DB_TABLENAME,"_id=" + lastSelectedId, null);
數據庫,然後我打電話bookmarksListAdapter.notifyDataSetChanged();
我SimpleCursorAdapter
。然後我發現listview中的條目沒有變化,這與我預期的行爲不同,我調用remove的行將消失。
「id一般是數據庫的_id」 謝謝 - 這會縮小問題的範圍。我已經編輯了我的帖子,以更具體地說明我正在做什麼來刪除該行,但我仍然不確定該條目是否從數據庫中刪除。我一定知道這個清單根本沒有更新。 – QRohlf 2010-07-23 16:13:12
你可以用sqlite3來查看你的數據庫 - 如果在手機上,使用adb shell,去數據庫所在的位置(/ data/data/your_app/databases),並用「sqlite3」調用它,並使用.dump來獲得完整的內容。然後,在刪除之前添加一個Log.d()以打印出lastSelectedId以查看您實際嘗試刪除的ID。 – EboMike 2010-07-23 17:46:22