2011-07-02 29 views
0

我目前正在使用記事本教程,並且exercise 2完成了刪除註釋的代碼。不過,我很困惑這是如何工作的。下面是相關的代碼:刪除行功能在Android記事本教程中如何工作?

public boolean onContextItemSelected(MenuItem item) 
{ 
    switch (item.getItemId()) 
    { 
     case DELETE_ID: 
      AdapterContextMenuInfo info = 
        (AdapterContextMenuInfo) item.getMenuInfo(); 
      mDbHelper.deleteNote(info.id); 
      fillData(); 
      return true; 
    } 
    return super.onContextItemSelected(item); 
} 

的行使狀態:「這[AdapterContextMenuInfo]對象的ID字段告訴我們在ListView的項目的位置,然後我們把它傳遞給deleteNote()方法我們NotesDbAdapter的並且該筆記被刪除。「

查看數據庫定義,數據庫中新添加的行/註釋的id字段是由自動遞增的數字自動生成的。因此,如果我們有4個ID爲1,2,3,4的註釋(不確定它是否爲零索引!)並刪除第二個註釋,我們是不是應該留下ID爲1,3,4?這意味着試圖刪除最後一個音符(現在是列表中的第三個音符,但仍然以其原始的第4個索引)應刪除索引= 3的行?或者,行被刪除後行會自動重新索引?

最後,你可以在手機上查看/瀏覽數據庫中的應用程序嗎?

回答

1

在我看來,有人在編寫示例文本時犯了一個小錯誤。如果您看到id字段AdapterContexteMenuInfo的文檔,則說明它返回元素的行ID。這由您的AdaptergetId()方法提供。

而且,是的,您可以閱讀手機的數據庫。您連接到仿真器外殼(如果您正在使用的仿真器)使用此命令在命令行:

adb -e shell 

然後你去到應用程序的文件夾(在/data/data/com.yourpackage)。應該有一個databases文件夾。從外殼輸入sqlite3 <databaseFileName>。然後您可以執行任何支持的數據庫操作(選擇,更新等)。檢查this page了,它甚至有一個關於sqlite3的部分。

+0

啊,謝謝。所以返回的行ID是數據庫的ID,而不是View中的物理位置。因此,列表中的哪一行並不重要(這是我如何預期它會被執行的) –

+0

是的。還有另外一個字段,「位置」,它具有列表/適配器中的實際位置。 – dmon