android - ListView行id和位置索引混淆

标签 android sqlite simplecursoradapter

我刚刚开始深入研究一些基本的 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/

相关文章:

android:使用 ListAdapter 和 SimpleCursorAdapter 刷新 ListView

android - 在 Android Studio :Whitespaces in directory location 中更改 SDK 位置

android - 如何检测在 Android 中完全下载的彩信?

vb.net - 将大文件存储到SQLite的内存不足错误

c++ - SQLite DB(带 WAL)在准备 "select"statmement 时被锁定 - 为什么?

android - 根据光标结果更改 ListView 项的背景颜色

android - React native 和 Android Instant Apps 将如何合作?有什么想法吗?

android - 当我在服务器上上传文件时,它显示错误

android - 从 SQLite 数据库读取 Android

android - 从 ArrayList<> 更改为 SimpleCursorAdapter 后使用 onItemClickListener