获取所有联系人并在列表视图中显示它们

时间:2013-07-01 07:37:32

标签: android listview android-contacts simplecursoradapter

我在列表视图中显示所有联系人,但效果很好。但我也想将图像添加到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);
}

提前致谢:)

2 个答案:

答案 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和名称的布局,然后在适配器中设置图像和名称等。