存在AsyncTask图像问题的Android ListView



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

当联系人没有照片时,我会使用默认的照片。我在XML中设置了默认值。当我使用以下方法设置联系人照片时(如果它存在),并且我滚动列表查看那些没有照片的联系人时,开始获取其他联系人的照片。如果我从retrieveContactPhoto方法中获得默认照片为位图,而不是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);
    }
}

我想您正在寻找这个库:https://github.com/nostra13/Android-Universal-Image-Loader

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

您可以将所有的图像绑定、获取和缓存内容都留给库。

最新更新