我剛開始深入瞭解一些基本的Android開發,並試驗了ListView
並將其與SimpleCursorAdapter
集成。我瀏覽了很多在線代碼示例,但我也有一本書可用作參考(專業Android 2應用程序開發)。ListView行ID和位置索引混淆
在本書中,他們制定了一個示例待辦事項列表應用程序,該應用程序將列表項存儲在帶有自動遞增整數主鍵字段的SQLite數據庫中。
用戶可以創建新的列表項目,但也可以從列表中刪除選定的項目。在代碼中,當刪除發生時,主鍵字段被限制(在SQL語句的WHERE
子句內)該項目的position
屬性,而不是該項目的rowid
。
對我來說,這似乎是一個不正確的實現。看看AUTOINCREMENT
的SQLite文檔,它說這個值總是會增加,舊值永遠不會在同一張表上重複使用。因此,如果您要刪除列表並將其添加到列表中,則位置和行ID似乎可能會很快失去同步。
那麼,我是否正確,然後,假設行ID是「索引」到數據庫表和不是列表位置的正確方法?如果使用常規的ListAdapter
,我認爲該位置可以安全使用,但在索引數據庫時看起來並不合適。
他們不只是使用列表位置來檢索行ID,然後刪除行ID? –
沒有。他們將該位置傳遞給一個只運行以下內容的函數:'return db.delete(DATABASE_TABLE,KEY_ID +「=」+ _rowIndex,null)> 0;'_rowIndex'是該項目的位置,而不是行ID 。這是從上下文菜單回調中調用的,它們將'menuInfo.position'作爲'_rowIndex'來傳遞。 –
好的,現在接聽 –