Android onListItemClick不适用于非整数id

Android onListItemClick不适用于非整数id,android,listview,Android,Listview,我正在使用一个listview,其中主键是文本,而不是整数。它实际上是一个唯一的url 到目前为止,我甚至成功地将url列别名为rawQuery中的_id,listview愉快地接受了它 但是现在我遇到了一个问题 onListItemClick以long的形式返回id,因此当我单击某个项目时,无论发生什么情况,我都会得到0 是否可以通过其他方式获得单击的id?应该可以将字段id添加到数据库中。其他方面,这可能对您有用: protected void onListItemClick(ListVie

我正在使用一个listview,其中主键是文本,而不是整数。它实际上是一个唯一的url

到目前为止,我甚至成功地将url列别名为rawQuery中的_id,listview愉快地接受了它

但是现在我遇到了一个问题

onListItemClick以long的形式返回id,因此当我单击某个项目时,无论发生什么情况,我都会得到0


是否可以通过其他方式获得单击的id?

应该可以将字段id添加到数据库中。其他方面,这可能对您有用:

protected void onListItemClick(ListView l, View v, int position, long id) {
    Cursor c = (Cursor) getListAdapter().getItem(position);
    String url = c.getString(c.getColumnIndex("_id"));
}

如果像中一样在适配器上使用筛选,此解决方案将不起作用。onListItemClick将在过滤后报告位置。

将列id添加到db表中,然后光标适配器将正常工作。这似乎是最简单的。@Hermann:CursorAdapter似乎工作得很好。一切都按预期显示在listview中。没有错误。但是OnListItemClick返回的id始终为零,因为它希望id为整数。如果_id是文本,我不明白为什么添加_id列可以解决这个问题。此外,url列别名为_id,因此从适配器的角度来看,有一个_id列!CursorAdapter和ContentProvider需要一个整型的列id。因此,如果您想让适配器正常工作,请添加类型为integer的columns _id。带有url的列仍然可以是主键,也可以被命名为id。这肯定会起作用,但我回到了一开始,我有一个整数id:-我是Android新手,正在探索可能性,我认为使用url作为id更合乎逻辑。与框架对抗不是最好的方式。您应该接受必须有一个名为_id且类型为integer的列。仍然可以有一个字符串类型的唯一列。我认为这是可行的。除非它应该是c.getColumnIndex_id,因为url列在查询中被别名为_id。然而,什么是过滤?我想我仍然可以使用WHERE子句过滤我的原始查询,对吗?是的,如果使用sql进行过滤,一切都很好。我的意思是像这样过滤列表视图。啊,好的。我试过你的解决方案,效果很好。非常感谢。但还有一个问题:我在这里使用非整数id列的做法不好吗?我真的应该回到整数_id吗?如果没有整数类型的_id列,您将一次又一次地遇到问题。