在Android ListView中包含来自MySQL表的行ID(对于每个列表项)

时间:2013-04-02 19:35:47

标签: android database android-listview rowid

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

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

做一些初步研究似乎有多种方法可以做到这一点。最简单的可能是使用id,这是最好的方法吗?如果是这样,您如何为其分配{{1}}?

2 个答案:

答案 0 :(得分:1)

创建一个名为Fruit的class

class Fruit {
    private int fruit_id;
    private String fruit_name;

    // Constructors

    // Getters and Setters
}

使用ArrayAdapter<Fruit>作为ListAdapter的{​​{1}}。然后在ListView的{​​{1}},获取Fruit对象并获取其ID。

答案 1 :(得分:1)

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

默认情况下,CursorAdapter会在您提供的"_id"中查找名称为Cursor的列,并在您点击某个项目时将其返回为id值:

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

最后一个值将包含光标项的id。您还可以覆盖此行为,并让它返回您在Cursor中可以访问的任何其他唯一值。

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


  

我的问题是,如果我抓住,例如,item_id(不只是项目),   我在哪里把item_id放在listView行中(在Android端)?

拥有代表您在列表中可视化的数据的对象的美妙之处在于,您已经具备了使其工作的所有要素。我们来看看@jaibatrik给出的Fruit示例,并为此示例添加一个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的数据集的一部分。