我正在通过SimpleCursorAdapter
从sqlite数据库中检索数据,并在ListView
上显示结果。数据库保存联系信息以及ID字符串。我在listview项目上显示的两个项目是一个人的姓名和电话号码,但我没有显示ID字符串(UUID)。
因此,当用户按下此列表视图中的项目时,我们如何识别数据库中的相应行?该项目仅包含名称和编号,但不包含ID列,这意味着我无法在数据库中找到相应的行。
如何在不在列表项中显示长UUID字符串的情况下解决此问题?
答案 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
添加_id
到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);
在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)