android-在现有ListVIew中添加更多项目时,ImageView重叠

android-在现有ListVIew中添加更多项目时,ImageView重叠,第1张

概述我正在创建一个ListView作为一个TextView和ImageView作为一个列表项行.最初,我正在从本地数据库的列表视图视图中加载默认项,并且我在列表视图的顶部具有一个更新按钮,以便从服务器中加载更多项当用户按下更新按钮时,我启动了AsyncTask,它从服务器中拉出图标网址和文本.在ImageV

我正在创建一个ListVIEw作为一个TextVIEw和ImageVIEw作为一个列表项行.

最初,我正在从本地数据库的列表视图视图中加载默认项,并且我在列表视图的顶部具有一个更新按钮,以便从服务器中加载更多项

当用户按下更新按钮时,我启动了AsyncTask,它从服务器中拉出图标网址和文本.

在ImageVIEw中加载图标我正在使用ImageDownloader的示例,但问题是我的ImageVIEw与VIEwHolder模式的旧ImageVIEws bcoz重叠了.有人可以嘲笑我我在做什么错吗?

这是我的ListVIEw适配器代码

@OverrIDepublic VIEw getVIEw(int position, VIEw convertVIEw, VIEwGroup parent) {                VIEwHolder holder;                TemplateData data = (TemplateData) this.getItem( position );                if(convertVIEw == null){                    LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);                    convertVIEw=inflater.inflate(R.layout.text_template_default_row, parent, false);                    holder = new VIEwHolder();                    holder.templateText = (TextVIEw) convertVIEw.findVIEwByID(R.ID.defText);                    holder.templateIcon = (ImageVIEw)convertVIEw.findVIEwByID(R.ID.defIcon);                    holder.templateTitle = (TextVIEw) convertVIEw.findVIEwByID(R.ID.defTitle);                    convertVIEw.setTag(holder);                }else{                    holder = (VIEwHolder)convertVIEw.getTag();                }                holder.templateText.setText(data.getText() );                holder.templateTitle.setText(data.getTemplateTitle());                //isImageLoading initially sets to false so that default items will use the                // resource IDs , it gets falsed when AsyncTask finished load Images and update the                //adapter and at that time this adapter has to pic the image from ImageDowloader                if(!isImageLoading)                    data.setTemplateIconID(iconList[position]);                //Has resource ID but not icon url                if(data.getTemplateIconID()!=0 && data.getTemplateIconUrl()==null ){                    Log.d("Load icon ","Default Load");                    holder.templateIcon.setBackgroundResource(data.getTemplateIconID());                // does not has recource ID so load url from server                }else if(data.getTemplateIconUrl()!=null && data.getTemplateIconID()==0){                    Log.d("Load icon ","From Server Load");                    imageDownloader.download(data.getTemplateIconUrl(), (ImageVIEw) holder.templateIcon);                }                    return convertVIEw;         }

iconList包含应用程序中现有图标的资源ID.
请随时询问是否有人需要更多信息.

编辑

这是屏幕截图

最初将有8个模板和其图标仅从存储在AndroID手机中的数据库加载.其名称从模板1到模板6

现在,当用户按下更新按钮时,新模板将在此处加载.它的名称从模板new 1开始到模板new 9,但是当我向上滚动n向下时,imageVIEws重叠了

这是屏幕截图

解决方法:

我怀疑您的imageDownloader在最初调用setBackgroundResource时正在调用ImageVIEw的setimageResource(或等效设置src属性).那将解释重叠.

您需要做的是在以下代码中将setBackgroundResource更改为setimageResource:

 if(data.getTemplateIconID()!=0 && data.getTemplateIconUrl()==null ){                Log.d("Load icon ","Default Load");                // This line should say setimageResource:                holder.templateIcon.setBackgroundResource(data.getTemplateIconID()); } else ... 

如果下载需要很长时间并且视图已被重用,@ Akos提到的问题(他似乎已删除)将对您来说是一个问题.重申一下他所说的话,一旦通过上述解决方案完成此工作,您就会发现,如果图像下载花费很长时间(以至于该行已被重用,并且新的图像集很长),您的图像可能会被较旧的图像覆盖.

因此,在下载之前,您还需要在imageDownloader内部说:

imageVIEw.setTag(url);

然后在下载完成之后,在ImageVIEw中设置图像之前:

if(!(String)imageVIEw.getTag().equals(url){      return; }

这样,如果ImageVIEw同时已被另一行重用,则下载将简单地中止.

总结

以上是内存溢出为你收集整理的android-在现有ListVIew中添加更多项目时,ImageView重叠全部内容,希望文章能够帮你解决android-在现有ListVIew中添加更多项目时,ImageView重叠所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1085691.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存