识别listview中的项目

时间:2013-08-02 12:46:39

标签: android listview

我正在通过SimpleCursorAdapter从sqlite数据库中检索数据,并在ListView上显示结果。数据库保存联系信息以及ID字符串。我在listview项目上显示的两个项目是一个人的姓名和电话号码,但我没有显示ID字符串(UUID)。

因此,当用户按下此列表视图中的项目时,我们如何识别数据库中的相应行?该项目仅包含名称和编号,但不包含ID列,这意味着我无法在数据库中找到相应的行。

如何在不在列表项中显示长UUID字符串的情况下解决此问题?

4 个答案:

答案 0 :(得分:1)

将传递给SimpleCursorAdapter的光标包含在UUID中。仅仅因为光标包含UUID并不意味着它必须显示它。然后,当您获得在OnItemClickListener.onItemClick()中点击的项目的位置时,使用Cursor.moveToPosition()将光标移动到此位置,并使用Cursor.getString()获取UUID。

另一种方式(更优雅)是在传递给onItemClick的AdapterView上调用getAdapter(),然后将适配器转换为CursorAdapter并在游标适配器上调用get getItem()。这应该返回在指定位置设置的光标对象。

答案 1 :(得分:1)

OnItemClickListener的onItemClick()方法传递列表中的位置,而Adapter有一个方法getItem(int position)。 将getItem()的结果转换为Cursor,这将是您的游标初始化为指向您单击的行,这样您就可以获得原始查询中的任何数据,无论任何视图中的内容是什么。

例如为: cursor.getString(cursor.getColumnIndex( “phoneNumber的”)));

答案 2 :(得分:1)

ListView的行布局中添加另一个TextView并使此TextView不可见。 在初始化您从数据库获取的SimpleCursorAdapter添加_idTextView时。由于此TextView不可见,因此不会显示。

String[] from = new String[] { "name", "_id" };
int[] to = new int[] { R.id.name, R.id.your_hidden_textview_id };       
SimpleCursorAdapter sadapter = new SimpleCursorAdapter(this,
            R.layout.ur_row_layout, ur_cursor, from, to);

OnItemClick ListView只需使用以下代码即可获取联系人ID

public void onItemClick(AdapterView<?> arg0, View view, int pos, long arg3) {

TextView contactid = (TextView) view.findViewById(R.id.your_hidden_textview_id);
String Contact_id = contactid .getText().toString();
}

答案 3 :(得分:0)

  • 您可以通过自定义适配器
  • 将UUID保存在与ListView连接的阵列中
  • 此外,您可以使用setTag()将此UUID存储在视图中,并将UUID传递给自定义适配器中的视图。