我刚刚开始深入研究一些基本的 Android 开发,并且一直在尝试使用 ListView
并将其与 SimpleCursorAdapter
集成。我浏览了很多在线代码示例,但我也有一本书可以用作引用(Professional Android 2 Application Development)。
在书中,他们开发了一个示例待办事项列表应用程序,该应用程序将列表项存储在 SQLite 数据库中,该数据库具有自动递增的整数主键字段。
用户可以创建新的列表项,但也可以从列表中删除选定的项目。在代码中,当删除发生时,主键字段受项目的 position
属性限制(在 SQL 语句的 WHERE
子句中),而不是项目的 rowid
。
对我来说,这似乎是一个不正确的实现。查看 AUTOINCREMENT
的 SQLite 文档,它说该值将始终增加,并且永远不会在同一个表上重复使用旧值。因此,如果您要在列表中删除和添加内容,位置和行 ID 似乎会很快失去同步。
那么,我是否正确地假设行 ID 是“索引”到数据库表中的正确方法,不是列表位置?我认为如果使用常规的 ListAdapter
,这个位置可以安全使用,但在索引到数据库时似乎不合适。
最佳答案
您可以使用该位置将游标获取到特定列表条目(并且此游标将是与行 ID 对应的“表”中的“行”):
Cursor cursor = (Cursor)parent.getItemAtPosition(pos);
int rowCol = c.getColumnIndex("_id");
然后你应该看到 cursor.getLong(rowCol) == id
关于android - ListView行id和位置索引混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6658115/