包括行ID从MySQL表在Android ListView(为每个列表项)



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

例如,假设有一个名为fruit的表。16的fruit_idorange。当listView显示水果列表时,用户单击显示橙色的行,我希望能够访问该行的fruit_id(16)。但我不知道该把它"藏"在哪里。

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

创建一个名为Fruit的class

class Fruit {
    private int fruit_id;
    private String fruit_name;
    // Constructors
    // Getters and Setters
}

使用ArrayAdapter<Fruit>作为ListViewListAdapter然后在ListViewonItemClickListener处,获取Fruit对象并获取其id。

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

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

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

最后一个值将包含游标项的id。你也可以覆盖这个行为,并让它返回任何其他唯一的值,你可以访问Cursor

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


我的问题是,如果我抓取,例如item_id(不仅仅是item),我在哪里把item_id在listView行(在安卓方面)?

用对象来表示你在列表中可视化的数据的美妙之处在于,你已经拥有了让它工作的所有成分。让我们以@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的适配器。

现在,假设您将OnItemClickListenerListView设置在一起,它将在用户点击物品时触发。使用传入回调的参数,您可以检索与所选位置相关联的项:

@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的数据集的一部分。

相关内容

最新更新