ListView活动时,每个items里图片为什么会复用被遗弃的view的图片,怎么解决?,

ListView活动时,每个items里图片为什么会复用被遗弃的view的图片,怎么解

0

8个回答

解决方法
出现错乱的原因是异步加载及对象被复用造成的,如果每次getview能给对象一个标识,在异步加载完成时比较标识与当前的item的标识是否是一致的,一致的则显示,否则加载你需要显示的图片或默认图片。
代码中加上
@Override
public View getView(int position,View convertView,ViewGroup parent){
ViewHolder holder;
if(convertView == null){
convertView = inflater.inflate(R.layout.list_item,null);
holder = new ViewHolder();
convertView.setTag(holder);
}else{
holder = (ViewHolder)convertView.getTag();
}

if(!imageurl.equal(holder.imageview.getTag())//如果标识不同,设置成你想要的图片,或默认图片,否则不需要处理
{
holder.imageview.setTag(imageurl);//imageurl 你需要加载的网络图片或其实来源的路径;
//imageview.setimageDrawable();//
}

return convertView;
}

1
q610098308
恋恋西风 你先全部设置成默认图片,这样,先显示默认图片,等图片下载后会显示下载后的图片;
大约 3 年之前 回复
cai784921129
IT小蔡 我已经给图片设置setTag了,但如果快速活动,图片还是会跳
大约 3 年之前 回复

重写Adpater的getView,根据ListItem的Id设定ImageView显示不同的图片

0
cai784921129
IT小蔡 已经这行设置了,还是不行
大约 3 年之前 回复

@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.select_date_item, parent, false);
holder=new ViewHolder();
holder.showSelectDateYear = (TextView) convertView.findViewById(R.id.showSelectDateYear);
holder.showSelectDateCountTimer = (TextView)convertView.findViewById(R.id.showSelectDateCountTimer);
holder.showSelectDateChinesrYear = (TextView)convertView.findViewById(R.id.showSelectDateChinesrYear);
convertView.setTag(holder);
}else {
holder=(ViewHolder) convertView.getTag();
}

        holder.showSelectDateYear .setText(list.get(position).toString());

    holder.showSelectDateCountTimer .setText(((getGapCount(date_start,date_end))+"")+"天后");

   holder.showSelectDateCountTimer .setText(chineseDay);

    return convertView;
}

}

static class ViewHolder{
TextView showSelectDateYear;
TextView showSelectDateChinesrYear;
TextView showSelectDateCountTimer;
}

例子都贴出来了 使用viewhold

0

这是listview优化问题,你可以试试RecyclerView替代ListView,现在它比listView好用

0

不仅要对文字要重新赋值,图片也是要重新赋值的。

0

给imageview设置一个tag,添加图片的时候根据tag做判断

0

图片加载的话,建议使用github上的开源项目Universal-Image-Loader,能够有效的解决图片闪跳的问题。

github地址:https://github.com/nostra13/Android-Universal-Image-Loader

0

这是listview优化结果,上方移除视线的view,会出现在下方,循环利用,所以你要用ViewHolder,来实现,不要每次都创建view,getview中每次重新加载图片

-1
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
ListView性能优化及加载图片出现图片错位,闪朔等问题的解决
在开发中ListView是一个用的比较的频繁组件,使用ListView来展示数据,我们一般需要做以下几个步骤:在主布局文件中写ListView组件,设置一些属性,编写一个布局文件用来做为ListView的item,最后写一个适配器来连接ListView和数据。我们对ListView的优化基本上都是在适配器中实现的。 先来说下自定义适配器中复写baseAdapter的几个方法。 //返回数据源
总结:listView等的优化和图片错位问题
ListView,RecyclerView 用过很多,写起来也没什么难度,但最近面试时被问及这个问题,发觉答的都不全面,现总结下最全面的优化方案如下: ContentVeiw的复用。在RecyclerView中强制必须复用。listView中就要自己实现,listview的复用机制就是条目很多的时候,只会创建满一屏的条目,当滑动的时候不会再去创建新的view,而是复用已经滑出屏幕的view,对...
android listview 加载图片错乱(错位)
   写道 今天晚上一个朋友介绍我看了一篇文章,也是解决android中listview在加载图片错位的问题,看了之后,感觉写的很好,自己也遇到这个问题,但是又不知道从何下手,看到这篇文章后,我的问题得到了解决,同时也感谢作者。 现在饿就把作者的文章转帖上来,给大家共享。        写道 1、采用线程池2、内存缓存+文件缓存3、内存缓存中网上很多是采用SoftRefer...
Android 解决ListView的复用问题
ListView是大家在项目的开发过程中不可避免要使用到的,使用ListView的同时我们还要使用到适配器,如果ListView只有一两条数据的话我们可能不会考虑到用ListView的复用机制,因为你用不用对象的创建和空间的开辟都是那么多。这样的话ListView复用出现的问题也就不存在了。然而很多应用展示的条目并不是那一两条数据,而是很多会多余一屏的显示,不然也就不会有加载更多的出现了。如果我们不
如何解决listview展示图片错乱
1.为什么回图片错乱 在进行listview 优化时复用条目时,在顶部出去的条目布局会被底部出现的信息复用,顶部信息会被重新加载,加载信息会有两种情况: (1).顶部比底部先完成加载,那么底部信息会覆盖顶部信息---- 信息正确 (2).顶部比底部后完成加载,那么顶部信息会覆盖顶部信息---- 信息错乱 那么解决这个问题只需加一个判断即可 列如 //将当前图片地址绑定到ImageV...
GridView、ListView数据更新图片闪烁问题
新功能是选择图片上传,选择完图片在上传前可以对已选择的图片进行删除。删除图片后,调用notifyDataSetChanged 通知UI数据更改。 是用Imageloader展示图片。 因为执行notifyDataSetChanged 后,GridView、ListView重新执行了getView 方法,getView 图片又重新加载。所以会出现图片会有闪烁。 解决方法是给图片setTag
本人原创!解决安卓ListView复用问题最简单的两种方法。
ListView在安卓很多地方需要用得到,其实listview是基于MVC架构设计的,即数据model,视图view和控制器controller。安卓已帮我们写好该框架,我们只需往里面塞数据就行。对于一些简单的listview,我们常用arrayadapter来作为适配器,但这往往不能达到我们想要的结果,为了界面的功能和美观,我们往往需要自定义适配器。而适配器的基类baseadapter安卓已帮我
GridView添加显示图片导致的view复用问题
最近在做一个功能:主页面添加图片,用GridView去显示图片。我刚开始是这么做的:添加完图片后,执行notifyDataSetChanged().按理说可以达到我们想要的效果去更新数据。但是却因为getView的view复用问题导致了图片重复,错乱问题。但是如果不用图片复用的话,那么势必会增加很多内存或开销去显示那么多的图片。所以我们还是得需要view复用,减少加载view,减少内存。 解决方
RecyclerView中ViewHolder重用机制理解(解决图片错乱和闪烁问题)
RecyclerView中ViewHolder重用机制理解(解决图片错乱和闪烁问题)对于使用ViewHolder引起的图片错乱问题,相信大部分人都有遇到过,我也一样,对于解决方法也有所了解,但一直都是知其然不知其所以然。所以,这次直接把ViewHolder的工作原理,通过简单的demo代码来验证一次,验证后对于图片错乱和闪烁这种问题的成因就很清楚了。
ListView复用和优化详解
前言 我们每一个Android开发人员对ListView的使用肯定是很熟悉的,然而多少人能真正的懂ListView的缓存机制呢,说白了就是ListView为了提高效率而内部实现的一种优化,而这种优化就需要复用ItemView(也就是item对应的View).那么下面楼主来对ListView和RecyclerView的item复用问题做一个深入的讲解
listview 复用 数据重复 id错乱 完美解决很简单
listview 如果里面有很多的子控件会发生id错乱,数据显示重复问题,或者图片显示重复,现在已经完美解决
recyclerview 的复用或者是item里的图片问题,还是图片随着数量不断变大,以及里button复用
不管是recyclerview和listview、girdview,都不知道用了多少次了,用着用着还是会出现问题,这里只是记录一下,加深印象,写的有些粗糙,勿怪!出现复用的问题,listview和gridview需要自己定义viewholder,而recyclerview里面已经定义viewholder。 recyclerview 绑定数据在 onBindViewHolder方法里面,现在大...
解决ListView中滑动复用时控件的混乱问题
这个问题恐怕很多人在刚开始使用ListView时都接触到过,就是比如listview的item中有一个Button或一个CheckBox,你明明点击按键改变了他的背景图片或者问题,又或者勾选了CheckBox,但是你一滑动,发现下面你没操作的item也跟着改变了,然后你再滑动回去,结果原来item上面的操作又变没了。这就是listview中item复用时所产生的问题,下面这种图就是例子。 上图就是例
安卓listview照片重复显示解决办法
类似游戏资讯的一个小项目效果图:listview页面点击listview页面的item进入详细页面1----------首先粘贴异步请求图片并处理的类  AsyncImageLoader类public class AsyncImageLoader { private HashMap<String, SoftReference<Drawable>> imageCache; ...
Android中ListView嵌套ListView,内层的listView绑定图片,滑动时出现图片错位,解决方法
Listview嵌套滑动出现错位,是因为外层适配器中convertView的复用造成的; 所以我们现在一个条目,对应一个convertView对象,放在一个map中,每次根据position,去判断,如果有直接用,没有就去创建 核心代码:AllIntegraAdapter package com.zhh.myceshi.cuowei; import android.content....
ListView复用和优化之多布局详解
前言在上一篇文章中,我已经非常详细的阐述了ListView的复用原理和几个大家不太明白的地方.也同时重现了复用的问题并告诉大家如何去解决.如果你没有看上一篇,请先移步,这篇基于上一篇的知识继续讲解ListView中多布局是个什么原理ListView复用和优化详解需求:实现联系人列表的展现形式先随便放一个联系人列表的效果图,博主随便找了一张图给大家看看效果先我们可以看到,这里肯定是一个列表来实现的,如
imageLoader 加载图片错位问题解决方案
最近功能开发中遇见imageLoader加载图片错位问题,记录一下 解决方案: 1.每次getView时将ViewHolder holder=null;(之前将holder在adapter中设成成员变量,一直加载错位,后改为局部变量) 2.位图片设置tag holder.img_goods.setTag(url); 再imageLoader.displayImage(url, h
ListView之图片闪烁问题
ListView性能优化的最重要的一条就是对convertView的复用,但也就是这个复用会出现一个问题,对于异步的耗时操作(如异步加载网络图片)会出现条目混乱,下面我就来分析一下。 所谓的复用就是新出现的item会直接使用已经滑出屏幕的旧Item,这样就保证了item能够被重复利用,降低了item数量以实现优化,如上图所示(图为盗用...若有侵权告知必删)。
给ImageView添加tag,避免view复用导致图片的重复
我们在使用SwipeRefreshLayout的时候,会用到listview或者PullToRefreshListView配合使用,但是我们在listview条目要求加载图片时(这个图片有可能一张,有可能多张)的情况下,这个就相对于有点复杂,复杂在你每个item获取的图片的数量都不一致,也不一样,也不确定他联网到的数据中到底有没有图片,,所以在这种情况下我是在布局中添加了ImageView组件,而
解决ListView下拉刷新时导致图片闪烁问题
说ListView是一个难用的组件并不为过。最近在开发项目时遇到这样一个问题:当使用ImageLoader异步加载ListView的图片时,下拉刷新就会导致ListView中的图片闪烁。于是,经过几番测试,发现问题在于下拉刷新时会不断地重新计算ListView的LayoutParams导致不断执行getView()方法,最终出现了图片闪烁问题。 经过上网查找资料,最终解决了该问题,主要有两个解决方
图片加载库Glide——解决图片错乱+无法设置tag
今天在写一个图片加载类ImageLoader,在使用的时候想用Glide替代我写的ImageLoader,然后问题就出来了!!!第一个问题:在使用自己写的ImageLoader的时候,为了防止item复用导致的图片错乱,设置了Tag 如下代码 @Override public View getView(int position, View convertView, Vi
listView或者gridView异步加载图片错乱问题
比如一页正常显示7个item ,当向下滑动一个条目的时候,由于listView的复用原则,如果不异步加载,虽然第一块和第八块指向的是同一个View,但是此时已经刷上了 第8个item 的数据, 而此时的第一块数据 也显示的是第八块数据,只是我们看不到而已,因为此时第一块和第八块指向的是同一块内存。 但是当出现异步加载的时候,如果2个item加载图片 有快有慢 ,所以,慢的一块没加载出来  会显示
android listView复用导致item上面动画的错乱
android listView复用导致item上面动画的错乱。网上大部分都是写的item上面显示静态图片的例子,我这个是解决显示动态图片时复用导致的动画显示错乱问题。问题描述:假如一屏可以显示10个item项,如果第一个正在播放动画,此时往下滚动,当第一个item不可见时会发现下面新出来的item上面的动画会动。该资源就是解决这个问题。看到的网友有福了,附件解压后即可载入studio运行。本人亲测可用!
ListView异步加载图片--图片缓存和错位问题解决方案
问题1: 加载太多的图片很容易造成OOM异常。一、图片缓存方法1:使用二级缓存 ->自己维护一个缓存区 只要有足够的内存,就一直保持对象,直到发现内存吃紧且没有Strong Ref时才回收对象。 所以可以这么做:map里面的键是用来放图片地址的,既可以是网络上的图片地址,也可以SDcard上的图片地址, map里面的值里面放的是持有软引用的Bitmap.private Map<St
android listview图片错位原理及解决方法
最近去面试被问到了listview中图片错位的原因,而我一直在往viewholder和tag机制上聊(被虐了),其实viewholder和tag机制只是解决图片错位的方法,而非产生图片错位的原理,回来又赶紧脑补了下~首先上图 图片错位原理: 如果我们只是简单显示list中数据,而没用convertview的复用机制和异步操作,就不会产生图片错位;重用convertview但没用异步,也不会有错位
ListView发生混乱和解决办法
1.发生混乱的原因借用别人的图来解释一下:1.如上图第一屏的7条数据,也就是会产生7条数据和7个新的布局,2.当屏幕滑动第一条数据消失,复用机制就会发生了,先把item1放到recycler中,等待屏幕底部数据出现,3当item8出现时,就会复用item1的布局和数据,。也可以这样 public View getView(int position, View convertView, ViewG...
RecyclerView和ListView的复用BUG以及解决办法
RecyclerView和ListView的复用BUG BUG出现的场景举例 简单的介绍复用机制 复用机制BUG的解决方式 BUG出现场景举例 当想实现listview的多选情况时,滑动出现,chekbox错乱,也就是没有选中的被选中了 当listview想要实现点击变色实现阅读过标记变色时,滑动后出现未阅读的也变色了 复用机制的简单介绍 当listView每要展示一个item的时候就会向ada
关于listview item重用导致图片重复加载 图片重新请求
关于listview item重用导致图片重复加载 图片重新请求
listview的点击错乱的解决办法
//重置了数据方法,加入position,防止错乱    public void reSetViewHolder(ViewHolder viewHolder, int position) {        CommunityItem communityItem = mCommunityItems.get(position);        viewHolder.head.setImageBitma
Adapter刷新时,列表中ImageView闪烁
应用场景:图片列表,数据发生改变调用 adapter.notifyDataSetChanged()时,图片重新加载导致闪烁抖动。原因:notifyDataSetChanged()会重新加载数据解决方案:图片地址未发生改变时,不需要重新加载,通过设置setTag()的方式判断数据是否发生改变,从而决定是否重新记载,不重新加载就不会发生闪烁eg: 未处理前 Item item = list.get(p
ListView中convertView和ViewHolder的复用机制工作原理
我们都知道在getView方法中的操作是这样的:先从xml中创建view对象(inflate操作,我们采用了重用convertView方法优化),然后在这个view去findViewById,找到每一个子View,如:一个TextView等。这里的findViewById操作是一个树查找过程,也是一个耗时的操作,所以这里也需要优化,就是使用viewHolder,把每一个子View都放在Holder中,当第一次创建convertView对象时,把这些子view找出来。然后用convertView的setTag
RecycleView复用错乱常用解决办法
RecycleView相对于ListView来说,它本身已经帮你解决了布局复用问题,但是使用不当,还会出现布局错乱问题。 1.当显示的数据是同步显示的,一般出现错乱都是因为逻辑问题,在recycleview中逻辑判断写if一定要写else 2.当显示的数据是异步的,比如加载网页图片,在图片下载成功以后再设置给imageview显示,如果显示错乱,可以在最开始给imageview设置一个tag,im...
listview数据错乱、重复的原因分析与解决方案
目前我们使用listview展示数据时,adapter的getView方法通常使用convertView.setTag(viewHolder)的方式来避免出现卡顿的情况,这种方式能使convertView得以复用,避免重复的调用inflate方法渲染界面。但是,如果使用不当,可能会出现数据错乱、重复的问题,比如下面这个demo:这个demo是要listview在偶数行只显示大写字母,在奇数行既显示大
ListView item错位 由于Item复用时高度不一致导致ListView 显示错误
不复用 Item 就可以解决了 !!!求大神其他解决方法 // // if(convertView == null){ holder = new ViewHolder(); view = View.inflate(context, R.layout.layout_item_city,null); hold
Android ListView 图片加载错位
最近遇到了使用ListView异步加载图片错位的问题,看了好多文章都没有找到我想要的。今天终于想明白并找到了解决方案,根据原因是ListView复用的原因,ViewHolder.imageView又是同一个对。 方案一:不使用ViewHolder,在getView方法中每次都去加载布局文件,这样每次的imageview对象都不同 方案二:使用ViewHolder,在getView方法中,[u]...
ListView加载图片错乱问题
常用方法,给显示图片控件添加Tag值(一般为图片url地址)   先看listview条目布局 RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"      xmlns:tools="http://schemas.android.com/tools"      android:layou
Recyclerview由于ViewHolder的复用显示错乱问题解决
Recyclerview由于ViewHolder的复用显示错乱问题解决
android app -- 关于listview的不复用,解决item状态改变的问题
我们在平常的开发中使用listView基本上都是复用使用,但是也有一些特殊情况时不能在使用复用例如listView中的每一项都能操作(比如有个editText输入内容,上下滑动之后,看输入框里面的内容是不是要被改变,或者在下面复用的时候出现了这个输入框里面的内容。比如,一个单选框,这一项选中之后,上下滑动之后,看这个选中状态是不是乱跑了,之前的选中状态是不是消失了。还有每个item都有一个加载动画...
Android之ListView学习笔记--layout以及view的复用
ListView的一个很需要处理的,且很重要的点,就是如果处理数据的显示操作。一般在一个listView中会有很多数据,如果每个数据对应的view都预先缓存,那估计内存会爆了...所以ListView中采用的是对view进行复用的操作。因为每次展示的只有几个数据,也就是说只会用到几个view,所以ListView的做法就是将view进行复用,每当有新的数据进入屏幕也会伴随着旧的数据移出屏幕,所以只...
ListView点击Item更换显示内容图片
先上效果图布局文件(就是一个listView)<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:l