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

时间:2011-11-11 17:45:57

标签: android android-listview android-contacts simplecursoradapter

我使用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),但它不起作用。而且,对于这么简单的任务来说,这似乎过于复杂。

有任何帮助吗?感谢。

2 个答案:

答案 0 :(得分:0)

你真的有两个选择:

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

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

答案 1 :(得分:0)

试试这个

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