我有一个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
您可以将所有的图像绑定、获取和缓存内容都留给库。