2011-11-08 48 views
1

我完成了记事本教程第2部分和各种工作正常。 但有一件事我只是不容弄清楚为什么它的工作;)Android记事本教程 - onListItemClick

的onListItemClick回调retreives参数:

  • 的ListView L - 检查
  • 视图V - 检查
  • 位置 - 用户点击的项目的位置,从基于零的索引开始(对吧?)
  • id - 用户关联的项目的行ID

这似乎是像在SqlLite数据库表中使用的相同的rowId“注释”...但是在哪里呢,ListActivity知道我们使用这个列作为行ID? 我没有找到列表和数据库表之间的任何映射,只是我们在fillData中绑定的游标。 但在标题栏和用户界面中的text1标识之间只有一个映射。 那么rowId绑定在哪里?如果我想改变对其他来源的绑定呢?提前

THX 亚历

+0

from _id column in Cursor ... – Selvin

回答

0

SimpleCursorAdapter(在fillData()方法中)将数据库光标的数据绑定到列表视图。无论什么时候点击一个项目,CursorAdapter都会实现哪个项目被点击,并通过id到列表活动。

+0

感谢您的回答。但是NotesDBAdapter中的deleteNote()操作如何?它接收rowId并执行一个删除操作,如return mDb.delete(DATABASE_TABLE,KEY_ROWID +“=”+ rowId,null)。使用AdapterContextMenuInfo.id在onContextItemSelected()中调用dleteNote()方法。这也意味着UI中的rowId在数据库中必须相同?或者这只是“随机”?对不起我困惑;) –

0

这并不像SQL中的ROWID。数据库与表单元素完全不同。

rowID在这个上下文中是一个简单的基于0的索引,告诉你你点击了什么。你的光标只是从表格中填充数据到ListView中。除非您直接查询ContentProviders或SQLite查询,否则不必选择行。

我希望这有助于!

+0

感谢您的回答,但是这引发了另外2个问题: 如果这不是数据库的rowID,为什么我们只需将onListItemClick方法中的'id'参数意图像editIntent.putExtra(NotesDbAdapter.KEY_ROWID,id)?这会推断出DB.rowID = ListView.Id。 另一个问题是位置和ID参数之间的区别?在我的例子中,我有2个条目,我点击第二个位置= 1和rowId = 4,假设我在调试之前添加和删除了注释。 –

+0

这些问题是什么? – Codeman

+0

@Alexander Beer看到我的评论...无论如何...它可以是数据库中的ROWID或者表中的任何其他PK ......您只需要在查询中“重命名”它就像“SELECT blabla AS _id,rest ,列,去,在这里从表“...编辑:忘了提及...在sqlite AFAIK,如果你使用你自己的整数/长PK,ROWID指向此列 – Selvin

相关问题