我目前正在处理记事本教程,exercise 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个索引)应该删除index = 3的行?或者,当行被删除时,行是否会自动重新编制索引?
最后,您可以在手机上查看/浏览数据库中的应用程序吗?
答案 0 :(得分:1)
在我看来,在编写示例文本时,有人犯了一个小错误。如果您看到AdapterContexteMenuInfo的id
字段的文档,则表明它返回元素的行ID 。这是由您Adapter
的{{1}}方法提供的。
而且,是的,您可以阅读手机的数据库。您可以从命令行使用此命令连接到模拟器shell(如果您正在使用模拟器):
getId()
然后进入应用程序的文件夹(在/data/data/com.yourpackage中)。应该有一个 adb -e shell
文件夹。在shell中,键入databases
。然后,您可以执行任何受支持的数据库操作(选择,更新等)。检查this page,它甚至有关于sqlite3的部分。