【问题标题】:Android: Set contact photo in a ListView with name and numberAndroid:在 ListView 中使用姓名和号码设置联系人照片
【发布时间】:2011-06-27 02:14:01
【问题描述】:

我正在创建一个应用,它需要显示手机联系人及其照片、姓名和号码。我创建了一个 ListView 并且可以使用通用照片显示联系人和号码,但我无法显示联系人的图片。这是我的代码:

Cursor cursor = getContacts();

String[] fields = new String[] {Contacts.DISPLAY_NAME, Phone.NUMBER};

SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.contact_entry, cursor,
            fields, new int[] {R.id.contactEntryText, R.id.contactEntryNumber});

mContactList.setAdapter(adapter);

private Cursor getContacts()

    // Run query
    Uri uri = Phone.CONTENT_URI;
    String[] projection = new String[] {
            Contacts._ID,
            Contacts.DISPLAY_NAME,
            Phone.NUMBER,
            Contacts.PHOTO_ID

    };
    //String selection = Contacts.HAS_PHONE_NUMBER + "='1'";
    String selection = null;
    String[] selectionArgs = null;
    String sortOrder = Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";

    return managedQuery(uri, projection, selection, selectionArgs, sortOrder);
}

如何在 SimpleCursorAdapter 中附加联系人的图片?还有吗?

非常感谢。

【问题讨论】:

    标签: android listview contacts photo image


    【解决方案1】:

    我想通了。如果有人遇到同样的问题,我就是这样做的:

    在扩展 ListActivity 的活动中:

        @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        Cursor names = getNamesAndPictures();
        names.moveToFirst();        
        ListAdapter adapter = new MySimpleCursorAdapter(this, R.layout.contacts,
                    names, new String[] {Phones.NAME, Phones.NUMBER}, new int[] {
                    R.id.Nombre, R.id.Numero});
        setListAdapter(adapter);
        startManagingCursor(names);
        Log.i(DEBUG_TAG, "Mi numero: " + miNumeroTelefono());        
    }
    
    public Cursor getNamesAndPictures(){
         String[] projection = new String[] {
                 Phones.NUMBER,
                 Phones.PERSON_ID,
                 People.NAME,
                 People._ID
         };
         String selection = Phones.NAME + "!='null'";
         String sortOrder = Phones.NAME + " COLLATE LOCALIZED ASC";
         Cursor cursor = managedQuery(Phones.CONTENT_URI, projection, selection, null, sortOrder);
         return cursor;
    }
    

    在自定义适配器中:

    public class MySimpleCursorAdapter extends SimpleCursorAdapter {
    
      ...
    
      @Override
      public void bindView(View view, Context context, Cursor cursor) {
          ImageView imageView = (ImageView) view.findViewById(R.id.Foto);
    
          int id = cursor.getColumnIndex(Phones.PERSON_ID);
          Uri uri = ContentUris.withAppendedId(Phones.CONTENT_URI, cursor.getLong(id));
          String uriPhoto = uri.toString();
          String uriPeople = uriPhoto.replace("phones", "people");
    
          Uri uriFinal = Uri.parse(uriPeople);
    
          Bitmap bitmap = People.loadContactPhoto(context, uriFinal, R.drawable.avatar02, null);
          imageView.setImageBitmap(bitmap);
          super.bindView(view, context, cursor);
      }
    }
    

    【讨论】:

    • 嗨 Racker,您是如何制作 XML 的,它是否有单独的文件用于 ImageView(照片)和 TextViews(姓名和号码)?想知道您如何将所有这些视图连接到您的ListView。我在我的Activity 中使用了一个片段,它从ListView 中提取,但随后一个单独的 XML 文件具有行内容(照片、姓名、编号),所以这就是 3 个 XML。感谢任何指导,谢谢。
    【解决方案2】:

    我知道这是一个非常古老的问题,但答案也是如此,因为该解决方案中的一些内容现在已被弃用。当我在寻找类似的解决方案时在搜索中出现了这个问题,我想我会在这里加两分钱......

    我创建了一个简单的联系人列表,其中包含来自ContactsContract 的姓名和照片。 请查看我的答案...https://stackoverflow.com/a/37710199/1209544

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-27
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-17
      相关资源
      最近更新 更多