2013-08-02 70 views
0

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

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

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

+0

您是否使用了一些自定义适配器来填补的ListView? – Procurares

+0

发布您如何获取联系信息,您检索并存储临时对象中的哪些数据 –

+0

您可以设置标签(位置)。我建议你应该(如果不使用)ID。然后,在点击列表项时,getTag()并将查询发回表。 (告诉我,看起来是否让你感到困惑。) – Prachi

回答

1

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

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

0
  • 你可以把你的UUID通过自定义适配器
  • 与ListView的连接还可以将此UUID鉴于存储与使用setTag()通过UUID的到您的自定义适配器视图的数组。
1

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

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

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); 

在你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(); 
} 
+0

如何让textview隐形? –

+1

在行布局中为您的textview添加android:visibility =“gone” –

+0

这非常有用,谢谢nidhi! –