【发布时间】:2013-12-12 07:56:04
【问题描述】:
首先,我有一个适配器,它使用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);
【问题讨论】:
-
你有解决这个问题的办法吗?
-
不,我退出了这个项目。我记得,我用这个替换了 UIL:github.com/yangfuhai/afinal
标签: android android-listview universal-image-loader