1

大家好,我有一个从数据库的字符串列创建的列表菜单。当用户单击列表菜单项时,他们将删除它。我通过将列表项位置传递给我的 DBAdapter 上的删除函数来做到这一点。

protected void onListItemClick(ListView l, View v, int position, long id) {
  super.onListItemClick(l, v, position, id);
  db.deleteContact(position);
  }

该函数找到相应的行索引并将其删除。

public boolean deleteContact(long rowId) {
  return db.delete(DATABASE_TABLE, KEY_NAME + "=" + rowId, null) > 0;
  }

问题(这对你们大多数人来说可能很明显)是当用户删除时,比如说列表菜单项 2,并且从表中删除相应的索引,列表菜单刷新并且之前在位置 3 的项目现在是在位置 2。如果用户试图删除它,删除函数接收“2”作为参数,但要删除的所需行的索引是 3。

我知道这是一个愚蠢的问题,但有人可以提出一个有效的解决方法吗?谢谢

4

1 回答 1

2

你不应该按位置删除。方法中id提供的onListClickItem内容可以帮助您。将上面的代码替换为:

protected void onListItemClick(ListView l, View v, int position, long id) {
  super.onListItemClick(l, v, position, id);
  db.deleteContact(id);
  }

前提是您KEY_NAME是表的主键。如果不是,则替换KEY_NAME为主键字段的名称。

于 2012-11-14T03:08:54.743 回答