Android ListView和数据库ID

时间:2014-04-14 18:16:06

标签: android sqlite listview

我在ListView中显示了一些对象。出于这个原因,我只为具有2个属性的对象提供了一个类:" name"和"价格" (是的,没有ID,因为我将SQLite数据库中的数据类型设置为整数,主键,自动增量。)

在我的Activity类中,我有一个ArrayList,里面填充了数据库中的所有对象(工作正常)

现在,我添加了一个onItemClick方法。

  public boolean onItemLongClick(AdapterView<?> parent, View convertView, final int position, long id) 

还有一个问题:尝试删除对象(我编写了我自己的删除方法,该方法工作正常但需要ID作为参数)不起作用,因为数据库中的ID不等于ListView中的POSITION。

我想知道方法中的第四个参数(long id),但它显示每个ListView项的值为0

任何想法如何为每个ListView项目位置获取正确的ID(如果项目被删除,它仍然可以正常工作)?

4 个答案:

答案 0 :(得分:1)

如果您使用的是CursorAdapter子类,那么如果您想从_id方法的第4个参数中获取主键,则应将主键命名为onItemLongClick

have a look herehere

答案 1 :(得分:0)

我认为列表是从db构建的,所以如果主键是自动增量的,它应该遵循列表的索引吗? db中的第一项=列表中的第一项?简单地在对象类中添加ID

会更容易

答案 2 :(得分:0)

ListView的id与数据库的id完全分开。如果删除数据库中的条目,则匹配不再正确,您可以使用 BUT 这个位置。我强烈建议在对象中加载和存储数据库ID。

答案 3 :(得分:0)

从Array或ArrayAdapter中获取对象,用于从传递给onItemLongClick的位置填充列表视图。下面的示例获取用于填充列表视图的ArrayAdapter中的项目。

public boolean onItemLongClick(AdapterView<?> parent, View convertView, final int position, long id) {
    myObject = myArrayAdapter.getItem(position);
}