我有一个显示两个列imagevIEws的grIDvIEw.我正在使用异步任务加载这些图像(请参阅帖子Lazy load of images in ListView)
但是,当我滚动grIDvIEw时,位置中的图像混合在一起.例如第14个图像显示第1个图像,我认为视图试图在异步任务完成之前显示旧图像.
我的代码:
public Content getItem(int position) { return contents.get(position); } public long getItemID(int position) { return position; } @OverrIDe public boolean hasStableIDs() { return true; } public VIEw getVIEw(int position, VIEw convertVIEw, VIEwGroup parent) { thumbnail contentVIEw; Content current = contents.get(position); if (convertVIEw == null) { contentVIEw = new thumbnail(mContext); } else { contentVIEw = (thumbnail) convertVIEw; } contentVIEw.Title = current.getTitle(); contentVIEw.image = current.getimage(); contentVIEw.link = current.getlink(); contentVIEw.init(); return contentVIEw; }
初始化功能
TextVIEw TitleText = (TextVIEw)super.findVIEwByID(R.ID.TitleText); TitleText.setText(Title); ImageVIEw imageControl = (ImageVIEw)super.findVIEwByID(R.ID.thumbImage); DrawableManager loadImage = new DrawableManager(); loadImage.fetchDrawableOnThread(imgurl, imageControl);
等待您的帮助
谢谢
解决方法:
这是由于资源重用而发生的.您应该做什么:
>首先,只需在getVIEw方法中为imageVIEw(contentVIEw.image.setimageResource(DEFAulT_RESOURCE))设置某种默认图像(过渡默认图片总比错误图片更好).
>为图像设置唯一标签,例如要加载的图像的位置或URL(contentVIEw.image.setTag(url)).
AsyncTask完成后,您可以使用一些检查方法,例如
String url=(String)imageVIEw.getTag();if (url.equals(mUrl)) { //mUrl can be transmitted to AsyncTask instance separately mActivity.runOnUiThread(new Runnable() { @OverrIDe public voID run() { imageVIEw.setimageDrawable(bmp); });});}
这是必需的,因为适配器不会为N个项目的所有N个ImageVIEw分配内存.它仅存储可见项所需的数量和一些保留的ImageVIEw.因此,我们无法保证您存储的ImageVIEw参考在几秒钟之内就会成为真实的,因为它可能会变得不可见并被可见的对象重新使用.
总结以上是内存溢出为你收集整理的Android-Gridview图像在滚动时混合全部内容,希望文章能够帮你解决Android-Gridview图像在滚动时混合所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)