获取所有联系人并在列表视图中显示它们
Posted
技术标签:
【中文标题】获取所有联系人并在列表视图中显示它们【英文标题】:Fetching all Contacts and showing them in listview 【发布时间】:2013-06-28 06:42:46 【问题描述】:我正在列表视图中显示所有联系人,并且效果很好。但我也想将图像添加到列表视图。搜索了很多,但没有找到任何好的教程。请建议一些在列表视图上显示联系人图像的教程。以下是我的代码。
Cursor cur = getContacts();
ListView lv = getListView();
String[] fields = new String[] ContactsContract.Data.DISPLAY_NAME ;
adapter = new SimpleCursorAdapter(this,
R.layout.contacts_list_row, cur, fields,
new int[] R.id.title, 0);
lv.setAdapter(adapter);
getContacts()
private Cursor getContacts()
// Run query
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = new String[] ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME ;
String selection = null;
String[] selectionArgs = null;
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME
+ " COLLATE LOCALIZED ASC";
return managedQuery(uri, projection, selection, selectionArgs,
sortOrder);
提前致谢:)
【问题讨论】:
***.com/questions/17267859/…。尝试链接中的示例 @Raghunandan 首先阅读问题。 【参考方案1】:使用 ImageView 和 TextView 编写自定义列表视图,并使用以下代码从 Content Provider 获取联系人图标图像
/**
* @return the photo URI
*/
public Uri getPhotoUri()
try
Cursor cur = this.ctx.getContentResolver().query(
ContactsContract.Data.CONTENT_URI,
null,
ContactsContract.Data.CONTACT_ID + "=" + this.getId() + " AND "
+ ContactsContract.Data.MIMETYPE + "='"
+ ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + "'", null,
null);
if (cur != null)
if (!cur.moveToFirst())
return null; // no photo
else
return null; // error in cursor process
catch (Exception e)
e.printStackTrace();
return null;
Uri person = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long
.parseLong(getId()));
return Uri.withAppendedPath(person, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY);
然后检查条件图像是否可用然后设置为imageview
Uri u = objItem.getPhotoUri();
if (u != null)
mPhotoView.setImageURI(u);
else
mPhotoView.setImageResource(R.drawable.defaultimage);
【讨论】:
您应该编写自定义适配器而不是使用“SimpleCursorAdapter”。在谷歌中找到编写自定义适配器。这可能有助于androidhive.info/2012/02/… 我相信getId()
只是存储当前人的id,可能在自定义适配器中找到。【参考方案2】:
我不知道您是否会找到有关如何使用简单适配器添加图像的教程...您可能需要创建一个自定义列表适配器。
这真的很简单,并为您提供了极大的灵活性。 try this 这应该是一个不错的起点。
您需要创建一个具有 ImageView 和名称的布局,然后在适配器中您可以设置图像和名称等。
【讨论】:
是的,你是对的,我知道如何编写适配器,但主要问题是找到联系人图像的获取和设置方式。 哦,我明白了。我假设您可以将图像列的名称添加到投影字符串数组中,它会返回带有光标的 URI?否则,您将不得不重新查询联系人以获取您从getContacts()
返回的游标中获取的 ID 的 URI 以上是关于获取所有联系人并在列表视图中显示它们的主要内容,如果未能解决你的问题,请参考以下文章
使用 android 2.1 在我自己的列表视图中显示姓名和联系电话
在列表视图中获取所有联系人(来自 Phone 和 sim )