2011-11-01 85 views
2

我已經使用擴展的SimpleCursorAdapter將我的聯繫人加載到列表中,現在我正在嘗試加載聯繫人照片。當運行代碼隨機聯繫照片出現在隨機聯繫人旁邊,即使對於沒有照片的人也是如此。爲什麼它只是獲得那些有他們並顯示在他們旁邊的聯繫人的照片?將聯繫人照片加載到聯繫人列表中:隨機聯繫人照片出現在錯誤的地方

下面是代碼:

public void bindView(View view, Context context, Cursor cursor) { 
ImageView photo = (ImageView) findViewById(R.id.photo); 
long photoId = cursor.getLong(cursor.getColumnIndex(ContactsContract.Contacts.PHOTO_ID)); 

Bitmap photoBitmap = loadContactPhoto(photoId); 
    if (photoBitmap != null) { 
     photo.setImageBitmap(photoBitmap); 
    } 

和代碼來loadContactPhoto:

public Bitmap loadContactPhoto(long id) { 
    Uri contactUri = ContentUris.withAppendedId(ContactsContract.Data.CONTENT_URI, id); 
    byte[] data = null; 
    Cursor cursor = managedQuery(
     contactUri, // Uri 
     new String[] { ContactsContract.CommonDataKinds.Photo.PHOTO }, // projection, the contact photo 
     ContactsContract.Contacts.PHOTO_ID + "!= 0", // where statement, only if the contact has a photo 
     null, null); 
    Log.i(LOG_TAG, "cursorCount: " + cursor.getCount()); // returns 1 
    if (cursor == null || !cursor.moveToNext()) {   
     return null; 
    } 
    data = cursor.getBlob(0); 
    Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); 
    return bitmap; 
} 
+0

你是如何實現「查看視圖?」的。 – SpicyWeenie

回答

0

在bindView(),你打電話:

ImageView photo = (ImageView) findViewById(R.id.photo); 

你不應該在視圖參數上調用findViewById()?

ImageView photo = (ImageView) view.findViewById(R.id.photo); 
+0

是的,謝謝!這部分解決了問題 - 它現在在正確的聯繫人旁邊顯示正確的照片。但是我仍然會隨機選擇其他沒有聯繫照片的其他聯繫人旁邊的隨機照片。有任何想法嗎? – Phat7

+0

爲了澄清,當我開始滾動列表時發生這種情況。可能是因爲getView或newView,我是否應該覆蓋這些或什麼? – Phat7

+0

發現了另一個罪魁禍首 - 我的bindView是回收行,所以我以前加載的照片出現在隨機的其他行。通過向'if(photoBitmap!= null)'添加'else'語句來修復。謝謝您的幫助! – Phat7