我有一个扩展ListView的活动。我用查询结果填充我的列表到sqlite数据库。 list元素由start_time,end_time,client_name和status组成。这些是我需要为每个列表项显示的4位信息。
我的问题是:我是否可以为此ListView项目分配隐藏元素?
例如,我想存储该ListView项的数据库行的_id字段,这样当我单击它时,我可以根据该数据库行的数据启动一个新活动。
修改
我用来从我的光标填充列表的代码:
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字段吗?
答案 0 :(得分:19)
您应该尝试从Web开发框架中稍微放松一下。无需在视图中的隐藏字段中存储id这样的内容。这会将您的数据与您的用户界面混合在一起,并产生许多混淆和不必要的视图对象。
如果您使用sqlite数据库存储您的值,则应使用CursorAdapter管理您的列表项。 CursorAdapter存储从数据库获得的结果,并管理数据向用户显示的方式。如果您在onItemClickListener上注册ListView,则侦听器将收到适配器以及在适配器中单击其单元格的数据项的位置。现在,您可以使用getItem检索指向用于创建listitem的数据库结果的游标。现在,您可以从数据库结果中获取未向用户显示的id或所有其他值,并将其附加到意图以开始下一个活动。
答案 1 :(得分:1)
您应该考虑创建一个可以收集所有这些信息的java对象。例如,您可以创建一个类似“ListItem”的类,每个项目将有5个属性:
START_TIME
END_TIME
CLIENT_NAME
状态
ID
(如果需要,还有更多)
然后,您有两个选项,要么序列化您的对象以将整个对象放入数据库中,要么保留您已有的结构(我想),并且数据库的每一行都变为{{1}对象。然后,当您查询数据库时,将它们全部放在ArrayList中,并扩展ArrayAdapter以创建自己的适配器。最后,在getView方法中,您调用ListItem
以及显示数据所需的所有方法,而不是使用myListItem.getEnd_Time
,您可以在需要时直接使用适配器对象
答案 2 :(得分:0)
如果您需要在_ViewI的onItemClick(...)之外不显示_id以外的非cols数据库列表 你打电话给:
mAdapter.getCursor();
然后,您可以获得所选列表项/行的任何非显示列。
正如Janusz所说,如果您只需要_id,请致电:
mAdapter.getItemId();