我刚刚开始深入研究一些基本的Android开发,并且一直在尝试使用ListView
并将其与SimpleCursorAdapter
集成。我查看了很多在线代码示例,但我也有一本书作为参考(专业Android 2应用程序开发)。
在本书中,他们编写了一个示例待办事项列表应用程序,该应用程序使用自动递增的整数主键字段将列表项存储在SQLite数据库中。
用户可以创建新的列表项,但也可以从列表中删除所选项。在代码中,当发生删除时,主键字段受到项目的WHERE
属性的限制(在SQL语句的position
子句内),而不是项目的rowid
对我来说,这似乎是一个不正确的实现。查看AUTOINCREMENT
的SQLite文档,它表示此值将始终增加,旧值永远不会在同一个表上重复使用。因此,如果您要删除并添加内容到列表中,那么位置和行ID似乎会很快失去同步。
我是否正确,假设行id是“索引”到数据库表中的正确方法而不列表位置?我认为如果使用常规ListAdapter
,该位置将是安全的,但在索引到数据库时似乎不合适。
答案 0 :(得分:1)
您可以使用该位置将光标移动到特定列表条目(此光标将是'table'中与行ID对应的'row'):
Cursor cursor = (Cursor)parent.getItemAtPosition(pos);
int rowCol = c.getColumnIndex("_id");
然后你应该看到cursor.getLong(rowCol) == id
答案 1 :(得分:0)
这绝对是不好的做法。我总是使用行id来删除,并使用position id来检索游标的行id。我在家里有那本书的第一版,我稍后会自己看一下。