我在列表视图中显示所有联系人,但效果很好。但我也想将图像添加到listview。搜索了很多,但没有找到任何好的教程。请提供一些在listview上显示联系人图像的教程。以下是我的代码。
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);
}
提前致谢:)
答案 0 :(得分:0)
使用ImageView和TextView编写自定义列表视图,并使用以下代码从内容提供商处获取联系人图标图像
/**
* @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);
}
答案 1 :(得分:0)
我不知道您是否会找到有关如何使用Simple适配器添加图像的教程...您可能需要创建自定义列表适配器。
它非常简单,并为您提供了极大的灵活性。 try this应该给出一个不错的起点。
您需要创建一个具有ImageView和名称的布局,然后在适配器中设置图像和名称等。