首先,我有一个适配器,它使用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项目时,会移至详细屏幕活动。在此屏幕中,我尝试获取详细图像(与所选项目具有相同的图像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);
答案 0 :(得分:4)
我也遇到过这个问题。经过多次搜索和尝试,我仍然找不到原因。偶尔,我认为问题可能是由于布局,所以我检查了一下:
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
然后我从&#34; wrap_content&#34;更改listView&#39;的layout_height to&#34; match_parent&#34;,问题解决了!
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
答案 1 :(得分:1)
我是这个图书馆的新手,但我认为问题在于这一行:
ImageLoaderConfiguration config.denyCacheImageMultipleSizesInMemory()
我相信确保每个图像uri只有一个大小缓存在内存中。所以详细版本必须重新加载。
此外,一旦调用详细视图,您是否取消剩余的缩略图任务/加载?如果没有,那么那些仍然在堆栈中。
修改:某些API详细信息已过时,但您可以查看配置文档 - http://www.intexsoft.com/blog/item/72-universal-image-loader-part-2.html
答案 2 :(得分:0)
日志中的消息是指列表视图图像。您的详细信息页面图像加载时间较长的原因可能与DisplayImageOptions
中设置的延迟有关.delayBeforeLoading(1000)
您使用的是默认配置吗?
答案 3 :(得分:0)
如果您不希望imageLoader重复使用其他图像,请使用&#34; resetViewBeforeLoading(true)&#34;
DisplayImageOptions defaultOptions;
defaultOptions = new DisplayImageOptions.Builder()
.resetViewBeforeLoading(true)
.displayer(new FadeInBitmapDisplayer(700))
.cacheOnDisk(true)
.cacheInMemory(true)
.bitmapConfig(Bitmap.Config.RGB_565)
.build();
现在它不会在您的实际图像加载之前显示另一个随机图像。
src: - 根据我自己的经验