0

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

那么当用户在这个listview中按下一个item时,我们如何识别数据库中对应的行呢?该项目仅包含名称和编号,但不包含 ID 列,这意味着我无法在数据库中找到适当的行。

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

4

4 回答 4

1

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

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

于 2013-08-02T12:53:41.523 回答
1

在您的行布局中ListView添加另一个TextView并使其TextView不可见。在初始化您从数据库中获取的SimpleCursorAdapter添加_id到 this 时TextView。由于这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);

在您只使用下面OnItemClickListView代码来获取联系人 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();
}
于 2013-08-02T13:06:44.937 回答
1

OnItemClickListener 的 onItemClick() 方法将列表中的位置传递给您,Adapter 有一个方法 getItem(int position)。将 getItem() 的结果转换为 Cursor,这将是您的光标初始化为指向您单击的行,因此您可以获取原始查询中的任何数据,而不管任何视图中的内容。

例如:cursor.getString(cursor.getColumnIndex("phoneNumber")));

于 2013-08-02T12:59:12.517 回答
0
  • 您可以通过自定义适配器将 UUID 保存在与 ListView 连接的数组中
  • 此外,您可以使用 setTag() 将此 UUID 存储在视图中,将 UUID 传递给自定义适配器中的视图。
于 2013-08-02T12:54:02.960 回答