3

我刚刚开始深入研究一些基本的 Android 开发,并且一直在尝试 aListView并将其与SimpleCursorAdapter. 我浏览了很多在线代码示例,但我也有一本书可以作为参考(Professional Android 2 Application Development)。

在书中,他们开发了一个示例 To-Do 列表应用程序,该应用程序将列表项存储在 SQLite 数据库中,具有自动递增的整数主键字段。

用户可以创建新的列表项,但也可以从列表中删除选定的项。在代码中,当删除发生时,主键字段受项目属性的限制(在WHERESQL 语句的子句内),position而不是项目的rowid.

对我来说,这似乎是一个不正确的实现。查看 SQLite 文档AUTOINCREMENT,它说这个值总是会增加,旧值永远不会在同一张表上重复使用。因此,如果您要删除并将内容添加到列表中,那么位置和行 ID 似乎会很快失去同步。

那么,我是否正确地假设行 ID 是“索引”到数据库表而不是列表位置的正确方法?我认为如果使用常规的位置是安全的ListAdapter,但在索引到数据库时似乎不合适。

4

2 回答 2

1

您可以使用该位置将光标移至特定列表条目(此光标将是与行 ID 对应的“表”中的“行”):

Cursor cursor = (Cursor)parent.getItemAtPosition(pos);
int rowCol = c.getColumnIndex("_id");

然后你应该看到cursor.getLong(rowCol) == id

于 2011-07-12T00:28:54.280 回答
0

这绝对是不好的做法。我总是使用行 id 来删除,并使用位置 id 来检索光标的行 id。我家里有那本书的第一版,以后我自己去看看。

于 2011-07-12T00:33:41.050 回答