Android 使用SimpleCorsOrAdapter时从联系人id检索和显示联系人名称

Android 使用SimpleCorsOrAdapter时从联系人id检索和显示联系人名称,android,android-listview,android-contacts,simplecursoradapter,Android,Android Listview,Android Contacts,Simplecursoradapter,我使用sqlite数据库存储手机联系人的信息。 我正在存储的字段是:\u id、contact\u id、body,其中\u id是行的id,contact\u id是电话联系人的id,body只是一个简单的文本,它是我正在存储的实际信息 我使用SimpleCursorAdapter将数据映射到视图,如下所示: Cursor cursor = database.fetchInformation(); // fetch info from DB String[] from = new St

我使用sqlite数据库存储手机联系人的信息。 我正在存储的字段是:
\u id、contact\u id、body
,其中
\u id
是行的id,
contact\u 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);
我真正想要的是获取与此联系人ID关联的联系人名称,并将其显示在视图中

我似乎找不到一个简单的解决办法。我曾尝试实现自己的SimpleCursorAdapter并重写setViewText(TextView,String),但没有成功。而且,对于这样一个简单的任务来说,它似乎过于复杂了


有什么帮助吗?谢谢。

您在这里有两个选择:

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

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

试试这个

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

我选择了第二个选项,现在它可以正常工作了。谢谢