2011-02-14 44 views
3

我正在創建需要使用照片,姓名和號碼顯示手機聯繫人的應用程序。我創建了一個ListView,並可以顯示通用照片的聯繫人和號碼,但我無法顯示Contat的圖片。這是我的代碼: Android:使用名稱和號碼在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中?還有嗎?

非常感謝。

回答

2

我想通了。如果有人有同樣的問題,這是我做的:

在擴展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); 
    } 
} 
+0

Hi Racker,你是如何製作你的XML的,它有一個單獨的'ImageView'(照片)和'TextViews'(名字和數字)文件嗎?想知道如何將所有這些視圖連接到你的'ListView'。我在我的Activity中使用了一個片段,它從一個ListView中拉出來,然後一個單獨的XML文件具有行內容(照片,名稱,編號),所以這3個XML都在一起。任何指導讚賞,謝謝。 – Azurespot

0

我知道這是一個非常老問題,但答案也是如此,因爲此解決方案中的少數內容現在已被棄用。由於在尋找類似解決方案時在搜索中出現的問題,我雖然會在這裏添加我的兩分錢...

我已經創建了一個簡單的聯繫人列表,其名稱和照片來自ContactsContract。 請檢查我的答案在... https://stackoverflow.com/a/37710199/1209544

相關問題