首先,我有一个使用 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);
}
});
}
当点击 ListView 项目时,它会移动到详细信息屏幕 Activity 。在此屏幕中,我尝试获取详细图像(与所选项目具有相同的图像 url)。
ImageLoader.getInstance().displayImage(photoPath, detailImageView);
问题是当我选择一个下载图像的项目(它被加载并显示在 ListView 中),但详细信息屏幕不会立即显示该图像,它仍然是黑色并等待适配器 ListView 中的所有项目完成加载和显示,然后它可以显示。
从 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);
我也遇到过这个问题。经过多次查找和尝试,仍然找不到原因。偶尔想到可能是layout的问题,于是查了一下:
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
然后我将 listView 的 layout_height 从“wrap_content”更改为“match_parent”,问题解决了!
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
我是一名优秀的程序员,十分优秀!