Android记事本教程中的删除行功能是如何工作的?

Android记事本教程中的删除行功能是如何工作的?,android,notepad,Android,Notepad,我目前正在学习记事本教程,并完成了删除笔记的代码。然而,我有点困惑这是如何工作的。以下是相关代码: public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) { case DELETE_ID: AdapterContextMenuInfo info = (AdapterContextMenuInfo

我目前正在学习记事本教程,并完成了删除笔记的代码。然而,我有点困惑这是如何工作的。以下是相关代码:

public boolean onContextItemSelected(MenuItem item)
{
    switch (item.getItemId())
    {
        case DELETE_ID:
            AdapterContextMenuInfo info = 
                    (AdapterContextMenuInfo) item.getMenuInfo();
            mDbHelper.deleteNote(info.id);
            fillData();
            return true;
    }
    return super.onContextItemSelected(item);
}
该练习说明:“此[AdapterContextMenuInfo]对象的id字段告诉我们该项在ListView中的位置。然后,我们将其传递给NotesDbAdapter的deleteNote()方法,并删除该注释。”

查看数据库定义,新添加到数据库的行/注释的id字段由一个自动递增的数字自动生成。因此,如果我们有4个id为1,2,3,4的注释(不确定是否为零索引!)并删除了第二个注释,我们不应该留下id为1,3,4的注释吗?这意味着,试图删除最后一个注释(现在是列表中的第三个注释,但仍具有其原始第四个索引)应该删除索引为3的行?或者,当一行被删除时,这些行是否会自动重新编制索引


最后,你能浏览一下你手机上的数据库吗?

在我看来,有人在编写示例文本时犯了一个小错误。如果查看的
id
字段的文档,它将声明返回元素的行id。这是由
适配器
getId()
方法提供的

是的,你可以读取手机的数据库。使用以下命令从命令行连接到emulator外壳(如果使用emulator):

   adb -e shell

然后进入应用程序的文件夹(在/data/data/com.yourpackage中)。应该有一个
数据库
文件夹。在shell中,键入
sqlite3
。然后,您可以执行任何受支持的数据库操作(选择、更新等)。看看吧,它甚至还有一个关于sqlite3的部分。

啊,谢谢。因此,返回的行id是数据库的,而不是视图中的物理位置。因此,行在列表中的什么位置并不重要(这是我所期望的实现方式)是的。还有另一个字段,
position
,它在列表/适配器中具有实际位置。