带有AsyncTask图像问题的Android ListView

时间:2013-11-29 02:44:38

标签: android android-listview android-asynctask android-lru-cache

我有一个ListView,显示电话簿中的某些联系人。我将此https://stackoverflow.com/a/10235381/1809507用作Cache类并使用AsyncTask。

当联系人没有照片时我会使用默认照片。我在XML中设置了默认值。当我使用以下方法设置联系人照片时,如果它存在,我滚动列表视图,那些没有照片的联系人开始获取其他联系人照片。如果我从retrieveContactPhoto方法得到默认照片作为Bitmap而不是null并分配给imageview,它工作得很好,但我认为当有很多没有照片的联系人时,这不是一个好的解决方案,因为我会多次缓存相同的默认照片。或者我错了?

@Override
    protected Bitmap doInBackground(Void... args)
    {
        Bitmap bm = HelpClasses.retrieveContactPhoto(contextInput, HelpClasses.fetchContactIdFromPhoneNumber(contextInput, phoneNumber));
        if(bm != null)
        {
            synchronized (cache)
            {
                cache.put(phoneNumber, bm);
            }

        }
        return bm;
    }

@Override
protected void onPostExecute(Bitmap result)
{
    if(mView != null && result != null)
    {
         mView.setImageBitmap(result);
    }
}

1 个答案:

答案 0 :(得分:0)

我认为您正在寻找此库:https://github.com/nostra13/Android-Universal-Image-Loader

或者,你可能想要一个更“谷歌”的人:https://code.google.com/p/libs-for-android/wiki/ImageLoader

您可以将所有图像绑定,抓取和缓存内容留给库。