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
,它在列表/适配器中具有实际位置。