将隐藏值分配给列表视图项

我有一个扩展ListView的活动。 我用查询结果填充我的列表到sqlite数据库。 list元素由start_time,end_time,client_name和status组成。 这些是我需要为每个列表项显示的4位信息。

我的问题是:我可以为这个ListView项目分配隐藏的元素吗?

例如,我想为该ListView项存储数据库行的_id字段,这样当我单击它时,我可以根据该数据库行的数据启动一个新活动。

编辑

我用来从我的Cursor填充列表的代码:

String[] columns = new String[] {VisitsAdapter.KEY_CLIENT_FULL_NAME, VisitsAdapter.KEY_STATUS,VisitsAdapter.KEY_CLIENT_START_TIME, VisitsAdapter.KEY_CLIENT_END_TIME}; // the XML defined views which the data will be bound to int[] to = new int[] { R.id.name_entry,R.id.number_entry,R.id.start_time_display,R.id.end_time_display }; SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(HomeScreen.this, R.layout.list_element, cur, columns, to); 

其中R.layout.list_item是我的列表项的XML。 我来自PHP / HTML背景,所以我通常会在这里做一个隐藏字段来保存我的_id值,然后我可以在单击列表项后访问它。 我可以在android中做类似的事吗? 我可以在我的xml布局中放置一个隐藏的_id字段吗?

您应该尝试从Web开发框架中稍微放松一下。 无需在视图中的隐藏字段中存储id这样的内容。 这会将您的数据与您的用户界面混合在一起,并产生许多混淆和不必要的视图对象。

如果您使用sqlite数据库来存储值,则应使用CursorAdapter来管理列表项。 CursorAdapter存储从数据库获得的结果,并管理数据向用户显示的方式。 如果您在ListView上注册onItemClickListener ,则侦听器将接收适配器以及在适配器中单击其单元格的数据项的位置。 现在,您可以使用getItem检索指向用于创建listitem的数据库结果的游标。 现在,您可以从数据库结果中获取未向用户显示的id或所有其他值,并将其附加到意图以启动下一个活动。

您应该考虑创建一个可以收集所有这些信息的java对象。 例如,您可以创建一个类似“ListItem”的类,每个项目将有5个属性:
开始时间
时间结束
客户名称
状态ID(如果需要,还有更多)

然后,您有两个选项,要么序列化对象以将整个对象放入数据库中,要么保留已有的结构(我想),并且数据库的每一行都成为ListItem对象。 然后,当您查询数据库时,将它们全部放在ArrayList中,并扩展ArrayAdapter以创建自己的适配器。 最后,在getView方法中,调用myListItem.getEnd_Time以及显示数据所需的所有方法,并且不要使用getId ,可以在需要对象时直接从适配器使用。

如果你需要除_id之外的非显示数据库列,你可以在ListView的onItemClick(…)中调用:

 mAdapter.getCursor(); 

然后,您可以获取所选列表项/行的任何非显示列。

正如Janusz所说,如果您只需要_id,请致电:

 mAdapter.getItemId();