首先,我有一个适配器,它使用 Universal Image Loader 库为每个项获取缩略图。代码如下:
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.page_edit_item, null);
viewHolder = new ViewHolder();
viewHolder.thumbnailImageView= (ImageView) convertView.findViewById(R.id.imgPageData);
viewHolder.progressBar =(ProgressBar) convertView.findViewById(R.id.photo_upload_progress_view);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.progressBar.setVisibility(View.VISIBLE);
String photoPath = getItem(position).getPhoto();
ImageLoader.getInstance().displayImage(photoPath, viewHolder.thumbnailImageView, new SimpleImageLoadingListener(){
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
progressBar.setVisibility(View.GONE);
}
});
}
当点击列表视图项目时,它会移动到详细屏幕活动。在此屏幕中,我尝试获取详细图像(与所选项目具有相同的图像URL)。
ImageLoader.getInstance().displayImage(photoPath, detailImageView);
问题在于当我选择一个已下载图片的项目(该图片已在列表视图中加载并显示),但详细屏幕不会立即显示此图片,它仍然是黑色的并等待适配器列表视图中的所有项目都完成加载和显示,然后才能显示。
从logcat中,当进入详细屏幕时,可以看到这一行:
ImageAware is reused for another image. Task is cancelled
有什么想法吗?
更新:这是我的UIL配置。
DisplayImageOptions options = new DisplayImageOptions.Builder()
.resetViewBeforeLoading(true)
.cacheInMemory(true)
.cacheOnDisc(true)
.bitmapConfig(Bitmap.Config.RGB_565) // default
.displayer(new SimpleBitmapDisplayer())
.build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
.memoryCacheExtraOptions(1024, 768)
.discCacheExtraOptions(1024, 768, CompressFormat.JPEG, 75, null)
.taskExecutor(getThreadPool())
.taskExecutorForCachedImages(getThreadPool())
.memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024)) // default
.discCache(new LimitedAgeDiscCache(cacheDir, 3600 * 24 * 7)) // default
.discCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default
.imageDownloader(new BaseImageDownloader(getApplicationContext())) // default
.defaultDisplayImageOptions(options) // default
.denyCacheImageMultipleSizesInMemory()
.writeDebugLogs()
.build();
ImageLoader.getInstance().init(config);