【问题标题】:Getting the ID of the ListView Item when it is populated from a database从数据库中填充 ListView 项时获取它的 ID
【发布时间】:2011-10-31 16:39:07
【问题描述】:
我正在开发一个 android 应用程序,其中用户通过从列表视图中选择 CREATE NEW 来填写表单,并且表单存储在 SQLite 数据库中并出现在列表视图中。是这样的
仅开始 CREATE NEW
填写表单后ListView会是这样的
新建
FORM1
FORM2
每个表单引用数据库表中的一条记录
现在我想做的是。
如果我单击 Form1,它应该打开供用户编辑等等。
我正在使用列表视图的位置来匹配记录的主 ID 并显示相应的记录
但是当我删除记录时,整个问题就来了
有没有更优雅的方法来获取从数据库中填充的 ListView 项的 ID?
【问题讨论】:
标签:
java
android
sqlite
android-layout
android-emulator
【解决方案1】:
如果您选择数据库中的所有记录,我的意思是没有任何条件,那么查询中表单的位置将是数据库中的相同位置,但是如果您的查询中有条件,那么您只能获得该位置条件查询中的表单。您提到了单击,因此在setOnItemClickListener() 中,您有 int 位置变量,用于指定 ListView 中的项目位置,有时您有一半可见项目,然后您可以应用公式 positon = position - listView.getFirstVisiblePosition(); 从而避免用位置打乱数据。同样在getView() 中,您也可以使用相同的int position 变量。我希望这是合理的。
当您删除记录时,您可以向ListView 发送信号以重新填充自己。使用当前和新数据(相同的数据减去从适配器删除的记录),如果这是您要查找的内容,您还可以向数据库发出信号(执行查询以删除该记录)以删除该记录。
【解决方案2】:
当一个item被点击时,你可以通过这种方式获取它的id:
将 OnItemClickListener 设置为 listView,然后您将获得 id:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> av, View v, int pos, long id)
{
// Do whatever you want. "id" as the id in the db.
}
});