0

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

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 个,但仍具有其原始第 4 个索引)应该删除索引 = 3 的行?或者当一行被删除时,这些行是否会自动重新索引?

最后,您可以查看/浏览手机上的数据库以查找应用程序吗?

4

1 回答 1

1

在我看来,有人在编写示例文本时犯了一个小错误。如果您看到AdapterContexteMenuInfoid字段的文档,它会声明它返回元素的行 ID。这是由您的方法提供的。AdaptergetId()

而且,是的,您可以读取手机的数据库。您可以从命令行使用以下命令连接到仿真器外壳(如果您使用的是仿真器):

   adb -e shell

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

于 2011-07-03T00:19:46.933 回答