我在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(如果项目被删除,它仍然可以正常工作)?
答案 0 :(得分:1)
如果您使用的是CursorAdapter
子类,那么如果您想从_id
方法的第4个参数中获取主键,则应将主键命名为onItemLongClick
。
答案 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);
}