在使用 SimpleCursorAdapter 时从联系人 ID 中检索和显示联系人姓名

Posted

技术标签:

【中文标题】在使用 SimpleCursorAdapter 时从联系人 ID 中检索和显示联系人姓名【英文标题】:Retrieving and displaying a contact name from a contact id while using a SimpleCursorAdapter 【发布时间】:2011-12-27 05:28:38 【问题描述】:

我正在使用 sqlite 数据库存储有关手机联系人的信息。 我要存储的字段是:_id, contact_id, body 其中_id 是行的ID,contact_id 是电话联系人的ID,body 只是一个简单的文本,它是我要存储的实际信息。

我正在使用 SimpleCursorAdapter 将数据映射到视图,如下所示:

Cursor cursor = database.fetchInformation(); // fetch info from DB
    String[] from = new String[]  CONTACT_ID, BODY ;
    int[] to = new int[]  R.id.contact, R.id.body ;

    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.row, cursor, from, to);
    getListView().setAdapter(adapter);

我真正想要的是获取与此 CONTACT_ID 关联的联系人姓名,并在视图中显示

我似乎找不到简单的解决方案。我试过实现我自己的 SimpleCursorAdapter 并重写 setViewText(TextView, String) 但它没有用。此外,对于这样一个简单的任务,它似乎过于复杂。

有什么帮助吗?谢谢。

【问题讨论】:

【参考方案1】:

你真的有两个选择:

1) 您可以创建一个 MatrixCursor,其中包含您希望绑定到 ListView 的所有信息。虽然这样做并不难,但它可能不是最有效地使用内存,因为您需要获取光标中每个联系人的姓名。

2) 你可以从 CursorAdapter 继承。实现适当的 newView 和 bindView 方法非常简单。在 bindView 中,您只需查询手机的联系人内容提供商即可获取当前正在绑定的联系人的姓名。

【讨论】:

我选择了选项 2,现在可以正常工作了。谢谢。【参考方案2】:

试试这个

String where=PEOPLE.CONTACT_ID+"="+requiredId;
String[] projection=People.Name;//u only need name right?
int[] to = new int[] R.id.body ;//if body is ur text view

Cursor cursor = getContentResolver().query(People.CONTENT_URI,projection,where,null, null);

ListAdapter adapter=new SimpleCursorAdapter(this,R.layout.row,result,projection,to);

setListAdapter(adapter);

【讨论】:

以上是关于在使用 SimpleCursorAdapter 时从联系人 ID 中检索和显示联系人姓名的主要内容,如果未能解决你的问题,请参考以下文章

使用 EditText 过滤 SimpleCursorAdapter 支持的 ListView

更新 SimpleCursorAdapter,同时保持 ListView 中的滚动位置

SimpleCursorAdapter 在 bindView 上重复单击操作

数据库更改时,Android SimpleCursorAdapter 不会更新

当 SimpleCursorAdapter 将值从表添加到 listView 时检查列值

使用 SimpleCursorAdapter 基于 sqlite 查询更新列表视图