0

当我从数据库中获取信息(我正在使用MySQL)时,我还想获取id该行的 并以某种方式将其分配给“listView”的每一行。

例如,假设有一个名为fruit. fruit_id16 是orange. 当listView显示水果列表并且用户单击显示橙色的行时,我希望能够访问该fruit_id行的(16)。但我不确定在哪里“隐藏”它。

做一些初步研究,似乎有多种方法可以做到这一点。最简单的可能是使用 a tag,这是最好的方法吗?如果是这样,你怎么能分配id给它?

4

2 回答 2

1

如果您使用 anArrayAdapter来支持您的ListView,那么@jaibatrik 的建议绝对是一个好建议。但是,如果您使用的是CursorAdapter,则利用 . 的返回值可能更容易getItemId()

默认情况下, a将在您提供CursorAdapter的名称中查找列,并在您单击项目时将其作为值返回:"_id"Cursorid

onItemClick(AdapterView<?> parent, View view, int position, long id)

最后一个值将包含光标项的 id。您还可以覆盖此行为并让它返回您在Cursor.

对于 an 也是如此ArrayAdapter:默认情况下,它将返回项目在数组中的位置作为唯一 id。但是,您可以通过覆盖该方法轻松地使其返回fruit_id每个项目。然后它将onItemClick(...)直接传递,这样您就可以(再次)在那里检索它。


我的问题是,如果我抓取例如 item_id (不仅仅是 item),我应该将 item_id 放在 listView 行中的哪里(在 Android 端)?

拥有代表您在列表中可视化的数据的对象的美妙之处在于,您已经拥有了使其工作的所有成分。让我们Fruit以@jaibatrik 给出的示例为例,并为此示例添加一个 getter:

class Fruit {
    private int fruit_id;
    private String fruit_name;

    // Constructors

    // Getters and Setters
    public int getId() { return fruit_id; }
}

在您描述的评论中,您从数据库中检索水果数据并将其填充到列表中:

List<Fruit> fruits = ...

该列表应该是支持您的ArrayAdapter. 更具体地说,由于它是一个类型化的类,因此您应该有一个ArrayAdapter<Fruit>实例,将其设置为ListView.

现在,假设您有一个OnItemClickListener针对 的集合ListView,只要用户点击一个项目,它就会触发。使用传递给回调的参数,您可以检索与所选位置关联的项目:

@Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    Fruit fruit = (Fruit) parent.getItemAtPosition(position);
    int fruit_id = fruit.getId();
    ...
}

检索到对象后,您可以对它保存的数据做任何您喜欢的事情。无需针对行视图显式设置 id,因为它应该已经是支持ListView.

于 2013-04-02T20:07:26.200 回答
1

创建一个class命名的水果。

class Fruit {
    private int fruit_id;
    private String fruit_name;

    // Constructors

    // Getters and Setters
}

使用 anArrayAdapter<Fruit>作为ListAdapter您的ListView. 然后在ListView's处onItemClickListener,获取 Fruit 对象并获取其 id。

于 2013-04-02T19:48:42.090 回答