当我从数据库中获取信息时(我正在使用MySQL
),我还想抓住行的id
并以某种方式将其分配给'listView`的每一行。
例如,假设有一个名为fruit
的表。 fruit_id
中的orange
是listView
。当fruit_id
显示水果列表,并且用户点击显示橙色的行时,我希望能够访问该行的tag
(16)。但我不确定在哪里“隐藏”它。
做一些初步研究似乎有多种方法可以做到这一点。最简单的可能是使用id
,这是最好的方法吗?如果是这样,您如何为其分配{{1}}?
答案 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
的数据集的一部分。