9

我有一个扩展 ListView 的活动。我用对 sqlite 数据库的查询结果填充我的列表。列表元素由 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 字段吗?

4

3 回答 3

19

您应该尝试让自己从 Web 开发的思维框架中放松一点。没有必要在视图的隐藏字段中存储 id 之类的东西。这会将您的数据与您的用户界面混合在一起,并造成很多混乱和不必要的视图对象。

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

于 2010-08-16T11:49:02.720 回答
1

您应该考虑创建一个 java 对象来收集所有这些信息。例如,您可以创建一个像“ListItem”这样的类,每个项目将有 5 个属性:
start_time
end_time
client_name
status id(如果需要,还有更多)

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

于 2010-08-16T11:13:16.370 回答
0

如果您需要 _id 以外的非显示 db cols,请在 ListView 的 onItemClick(...) 中调用:

mAdapter.getCursor();

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

正如 Janusz 提到的,如果您只需要 _id,只需调用:

mAdapter.getItemId();
于 2013-11-25T19:21:01.063 回答