-1

我在列表视图中显示所有联系人,它工作得很好。但我也想将图像添加到列表视图。搜索了很多,但没有找到任何好的教程。请建议一些在列表视图上显示联系人图像的教程。以下是我的代码。

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

获取联系人()

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

提前致谢 :)

4

2 回答 2

0

使用 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);
 }
于 2013-07-01T07:42:57.333 回答
0

我不知道您是否会找到有关如何使用简单适配器添加图像的教程……您可能需要创建一个自定义列表适配器。

这真的很容易,并为您提供了极大的灵活性。试试这个应该给出一个不错的起点。

您将需要创建一个具有 ImageView 和名称的布局,然后在适配器中您可以设置图像和名称等。

于 2013-07-01T07:48:31.473 回答