我正在创建一个ListView作为一个TextView和ImageView作为一个列表项行.

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

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

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

这是我的ListView适配器代码

@Override

public 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,android-imageview,android

来源: https://codeday.me/bug/20191101/1980008.html

android 两个imageview重叠,android-在现有ListVIew中添加更多项目时,ImageView重叠相关推荐

  1. Android在ListView中嵌套一个GridView时只显示一行的原因及解决方法

    在之前的编程里,我还没有遇到过要在一个ListView中嵌套一个GridView或是在一个GridView中嵌套一个ListView.所以今天事儿来了!我花了一将近3个小时,找到了为什么我在一个Lis ...

  2. android 两列菜单,【Android】实战开发之ListView同一个item显示2列的实现方法(仿2列商品列表)...

    Android实战开发中,ListView控件用途十分广泛,各种自定义控件多种多样.当项目要求实现一个2列的商品列表形式的界面,我们首先肯定想到用ListView,然后我们可以使用百度的自定义List ...

  3. android gridview item 点击,Android-取消GridView/ListView item被点击时的效果

    方法一,在控件被初始化的时候设置 gridView.setSelector(new ColorDrawable(Color.TRANSPARENT)); listView.setSelector(ne ...

  4. android 两足机器人,基于Android的双足机器人语音控制系统研究

    摘要: 随着智能终端的快速普及和移动互联网的高速发展,人们通过一部手机连接整个世界的目标似乎已经实现.进入二十一世纪后,人工智能是科技领域绕不开的一个主题.虽然当下对于人工智能的研究或应用还都处于初级 ...

  5. ormlite android,如何使用ormLite在android中的现有实体中添加新字段?

    OLENT ENTITY:我有一个实体,我忘了在某些字段上添加@DatabaseField注释 @DatabaseTable public class Card { @DatabaseField(ge ...

  6. android 两种颜色融合,Android OpenGLES2.0(十八)——轻松搞定Blend颜色混合

    Blend是OpenGL中的一个非常重要的部分,它可以让每个输出的源和目的颜色以多种方式组合在一起,以呈现出不同的效果,满足不同的需求. Blend相关函数及意义 在OpenGLES1.0中,Blen ...

  7. 关于Android Studio Arctic Fox 无法在 build.gradle(Project) 中添加第三方Maven仓库的解决方案

    问题描述 在 Android Studio Arctic Fox 版本中创建项目,原本应该在 build.gradle(Project) 中配置第三方 Maven 仓库,手动配置后居然报错: 1: T ...

  8. android edittext 表情,Android在一个edittext中添加更多表情符号?

    您可以根据需要向Spannable添加任意数量的ImageSpans.只需遵循您链接的代码所规定的概念即可.您可能也想使用SpannableStringBuilder. Drawable happyS ...

  9. Android移动开发之【Android实战项目】DAY2-使用Fragment实现底部菜单栏

    由于TabActivity在Android4.0以后已经被完全弃用,那么我就不再浪费口水继续讲解它了,取而代之的是Fragment.Fragment是Android3.0新增的概念,Fragment翻 ...

最新文章

  1. 复习最基础的linux 之 创建用户及修改用户组
  2. 基于HTML5实现的(本地存储)多标签页面元素的复制粘贴
  3. 复现经典:《统计学习方法》第20章 潜在狄利克雷分配
  4. 二分图最大匹配模板 HDU1083
  5. mysql 过程 的函数的区别是什么意思_Mysql中存储过程和函数的区别是什么
  6. javascript设计模式系列 - LukeLin - 博客园
  7. Mycat - 数据库分库分表中间件,国内最活跃的、性能最好的开源数据库中间件
  8. java mset_Java 反射机制(包括组成、结构、示例说明等内容)
  9. 移动管理进步显著 企业仍然面临风险
  10. Linux的diff和git diff生成patch/打patch
  11. api php usdt 以太坊_以太坊PHP离线交易开发包
  12. lammps教程:原子平动和振动的设置方法
  13. 云时代的“双态IT”运维思路
  14. 简单用电脑摄像头实现人脸识别
  15. 计算机声卡电路分析,几款经典简单的声卡话筒功放电路分析
  16. 继屠呦呦后,下一个得诺奖的中国人可能是他?
  17. 计算机设备管理器无com,计算机无设备管理器的方法
  18. 大数据开发的26个专业术语
  19. 福特FORD EDI流程指南
  20. 如何隐藏IP地址的网站

热门文章

  1. ai进入轮廓模式怎么退出_五大容易过劳死的职业 怎么避免进入过劳死模式?
  2. horizon服务主要模块_openstack七大模块概述
  3. python基础案例教程_Python基础教程 两个经典案例:阶乘和幂
  4. 2017.5.9 积木大赛 思考记录
  5. 华为公布鸿蒙2.0内测清单,华为鸿蒙操作系统2.0版支持的设备清单流出,荣耀30s...
  6. 【英语学习】【Level 07】U05 Best Destination L4 A perfect destination
  7. 电脑开机出现奇怪字符_电脑开机出现Reboot and select proper boot device几种解决措施...
  8. python requests库api_python利用requests库进行接口测试的方法详解
  9. internetreadfile读取数据长度为0_Go发起HTTP2.0请求流程分析(后篇)——标头压缩
  10. C算法编程题(七)购物