我正在使用Android-Universal-Image-Loader库将远程图片加载到GridView单元格中的ImageView。
这里是imageLoader配置:
new ImageLoaderConfiguration.Builder(Config.context)
.threadPriority(Thread.NORM_PRIORITY - 2)
.memoryCacheSize(20 * 1024 * 1024) // 20 Mb
.memoryCache(new LruMemoryCache(20 * 1024 * 1024))
.defaultDisplayImageOptions(DisplayImageOptions.createSimple())
.tasksProcessingOrder(QueueProcessingType.LIFO)
.enableLogging() // Not necessary in common
.build();
和显示选项:
new DisplayImageOptions.Builder()
.showStubImage(R.drawable.blank)
.showImageForEmptyUri(R.drawable.no_image)
.build();
问题: 一旦使用gridview开始的活动一切正常并且图像出现在单元格中, 然后我向下滚动网格(我在网格中有大约20个项目)和其他图像正确加载。 但是,一旦我滚动顶部已加载的图像再次开始加载。
在向上和向下滚动几次后,网格会保存所有图像,并且它们不会再消失。
有人遇到任何类似的问题,或者你知道我做错了什么。 谢谢你的帮助。
ADDED : 这是我的适配器中的getView方法:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view = convertView;
ViewHolder holder;
if ( view == null ) {
view = Config.context.getLayoutInflater().inflate(R.layout.featured, null);
holder = new ViewHolder();
holder.titleText = (TextView) view.findViewById(R.id.featured_title);
holder.priceText = (TextView) view.findViewById(R.id.featured_price);
holder.image = (ImageView) view.findViewById(R.id.thumbnail_image);
view.setTag(holder);
}
else {
holder = (ViewHolder) view.getTag();
}
HashMap<String, String> listing = listings.get(position);
/* set text values */
holder.titleText.setText(listing.get("title"));
holder.priceText.setText(listing.get("price"));
/* load image to list (AsyncTask) */
Utils.imageLoaderFeatured.displayImage(listing.get("photo"), holder.image, Utils.imageLoaderOptionsFeatured);
return view;
}
PS。如果您想查看其他代码(可能是网格适配器)来帮助我解决此问题,请告诉我。
约翰
答案 0 :(得分:16)
我在Universal-Image-Loader演示中遇到了同样的问题,我希望图书馆开发人员能够在下次更新时解决问题。
更新:在 nostra13 的帮助下修复了问题,您必须将库更新为1.9 version并使用这种方式在{{{{}}中显示图片1}}:
imageView
找到有关您应该执行此操作的详细信息
答案 1 :(得分:1)
您必须使用适配器然后实现ViewHolder
以使滚动流程平稳有效。
为图像提供标签w.r.t到getView()
中提供的位置,然后就没有问题了。
答案 2 :(得分:1)
请勿在适配器getView()方法中使用set标记。请尝试在适配器getview()方法中查找视图ID。
public View getView(final int position, View convertView, ViewGroup parent) {
View view = convertView;
ViewHolder holder;
view = Config.context.getLayoutInflater().inflate(R.layout.featured, null);
holder = new ViewHolder();
holder.titleText = (TextView) view.findViewById(R.id.featured_title);
holder.priceText = (TextView) view.findViewById(R.id.featured_price);
holder.image = (ImageView) view.findViewById(R.id.thumbnail_image);
view.setTag(holder);
HashMap<String, String> listing = listings.get(position);
/* set text values */
holder.titleText.setText(listing.get("title"));
holder.priceText.setText(listing.get("price"));
/* load image to list (AsyncTask) */
Utils.imageLoaderFeatured.displayImage(listing.get("photo"), holder.image, Utils.imageLoaderOptionsFeatured);
return view;}
答案 3 :(得分:1)
您应该只声明一次ImageLoader和DisplayImageOptions实例。可能在构造函数中。
ImageLoader imageLoader = ImageLoader.getInstance();
DisplayImageOptions options = new DisplayImageOptions.Builder().cacheInMemory(true)
.cacheOnDisc(true).resetViewBeforeLoading(true)
.showImageForEmptyUri(fallbackImage)
.showImageOnFail(fallbackImage)
.showImageOnLoading(fallbackImage).build();
答案 4 :(得分:0)
这里使用StaggeredGridView也是同样的问题。 即使使用内存缓存和ImageAware方法,也无法解决。
唯一对我有用的是将缓存内存从4 MB扩展到10 MB。列表图像很小,但我有一个非常大的图像作为视图的标题。
我注意到imageViews也会在长时间点击时刷新,即使对于GridView也是如此?
无论如何,扩展内存缓存限制也解决了这个问题。
答案 5 :(得分:-1)
.i也遇到了同样的问题并通过wirting解决了问题
Utils.imageLoaderFeatured.displayImage(listing.get(“photo”),holder.image,Utils.imageLoaderOptionsFeatured); .......
里面的行如果(view == null).......你的转换视图== null只有加载图像和display.them ..这将解决你的问题.....