androidListView是android中重要的控件,几乎每一个项目都会用到。但是在使用中我们避免不

了会出现一些问题,包括一些滑动事件的处理,例如:ListView中嵌套scrollView,容易出现listView

展现数据不全的问题,还有就是listView中我们在加载图片的时候出现图片在加载中出现加载出来

的图片出现闪烁,在滑动listView中我们我们都会复用listView的缓存展示下一条的数据,其实我

们使用缓存也是为了提高listView的效率,减少内存的耗费,下面我就说说我在使用listView的时

候出现的问题及解决方案吧,一是作为笔记来保存,方便以后更深的理解和学习。二是让在学习

的小伙伴们不在出现这种问题,因为对于初学者来说(比如我)也是一种理解吧.

listView出现这种原因重要的就是图片异步加载的过程。首先listView在展示数据的时候,

没展示一条数据就会调用getView()一次,在我们进行下拉滑动的时候在新的数据展现出来的时

候我们都是在复用上一个item(也就是最顶部的item在不被可见的item),这时候的item还没

有被回收也就是里面的数据也没有回收旧被我们直接拿来使用了,这样会出现三个问题吧:一

,复用了上一个item,数据我们可以更新,但是图片可能我们更新不了,因为在加载图片的时

候我们就开启了线程去服务器请求图片,但是上一个item的图片还没有被回收,我们 在载的

图片还没有成功加载出来,这时候就复用了上一个item的图片;二,复用了上一个item同样

是图片没加载出来,但是由于内存的回收,图片被回收了,就出现了item上面的图片显示的

是是黑屏的渲染;三,同样是复用上一个item由于网络好加载图片很快,但是在我们快速滑

动的时候就出现了在不断复用item的时候就出现了图片加载错位了。针对以上的问题,

我在项目中做了一下事件,说了这么多其实可说说的全是废话吧,最关键的就是代码的实现。

其实真的来说要解决listView架子图片出现的问题,我们可以做如下的逻辑,明确一点

就是给listView设置一个标记,也就是setTag(),用url做唯一的标识进行判断。

//图片的请求服务器的工具类

public abstract class NetImageLoad {

private ImageView imageView;

private Handler handler = new Handler(){

public void handleMessage(android.os.Message msg) {

Bitmap bitmap = (Bitmap) msg.obj;

loadImage(imageView, bitmap);

};

};

public abstract void loadImage(ImageView imageView,Bitmap bitmap);

public void downloadImage(ImageView imageView,final String imgUrl){

this.imageView =imageView;

new Thread(){

public void run() {

try {

URL url = new URL(imgUrl);

HttpURLConnection connection = (HttpURLConnection) url.openConnection();

connection.setConnectTimeout(5000);

connection.setReadTimeout(5000);

InputStream is = connection.getInputStream();

Bitmap bitmap = BitmapFactory.decodeStream(is);

sleep(2000);

Message message = new Message();

message.obj = bitmap;

handler.sendMessage(message);

} catch (Exception e) {

e.printStackTrace();

}

};

}.start();

}

}

图片的加载处理

public class MainActivity extends Activity {

private ListView lv;

private List urlList;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

lv = (ListView) findViewById(R.id.lv);

urlList = new ArrayList();

for(int i = 0; i < 20; i++){

urlList.add(“图片存放的url地址”);//我使用的是Tomcat服务器

}

lv.setAdapter(new MyBaseAdapter());

}

class MyBaseAdapter extends BaseAdapter{

@Override

public int getCount() {

return urlList.size();

}

@Override

public Object getItem(int position) {

return urlList.get(position);

}

@Override

public long getItemId(int position) {

return position;

}

@Override

public View getView(final int position, View convertView, ViewGroup parent) {

ViewHolder viewHolder = null;

if(convertView == null){

viewHolder = new ViewHolder();

convertView = View.inflate(getApplicationContext(),

R.layout.list_item, null);

viewHolder.imageView = (ImageView) convertView.findViewById(R.id.iv);

convertView.setTag(viewHolder);

}else{

viewHolder = (ViewHolder) convertView.getTag();

}

viewHolder.imageView.setTag(urlList.get(position));

viewHolder.imageView.setImageResource(R.drawable.ic_launcher);

new NetImageLoad() {

@Override

public void loadImage(ImageView imageView, Bitmap bitmap) {

if(imageView.getTag()!=null && imageView.getTag().equals(urlList.get(position))){

imageView.setImageBitmap(bitmap);

}

}

}.downloadImage(viewHolder.imageView,urlList.get(position));

return convertView;

}

}

class ViewHolder{

ImageView imageView;

}

}

以上仅供参考,如有哪出有问题请给我留言,我及时更正,欢迎有大牛们指点。让我们能有更

深的提高,在这里谢谢那些为android开发提供资源的大牛们!!!!他们在前面的引路 给我们提高技术分享,让我们不断的学习,提升自己,谢谢他们,也欢迎伙伴们一起给我 分享,谢谢!!!!!

android listview 图片闪烁,listView异步加载图片导致图片错位、闪烁、重复的问题的解决...相关推荐

  1. android 图片加载 软引用_android Listview 软引用SoftReference异步加载图片

    首先说一下,android系统加载大量图片系统内存溢出的3中解决方法: (1)从网络或本地加载图片的时候,只加载缩略图.这个方法的确能够少占用不少内存,可是它的致命的缺点就是,因为加载的是缩略图,所以 ...

  2. Android实现ListView异步加载图片

    转: http://www.iteye.com/topic/685986 ListView异步加载图片是非常实用的方法,凡是是要通过网络获取图片资源一般使用这种方法比较好,用户体验好,下面就说实现方法 ...

  3. android开发小技巧:实现listview异步加载图片

    2019独角兽企业重金招聘Python工程师标准>>> 针对listview异步加载图片这个问题,麦子学院android开发老师讲了一种非常实用的方法,麦子学院android开发老师 ...

  4. Android 开发笔记 ListView异步加载图片

    当ListView需要在线获取数据,并且列表中需要显示图片时,友好的处理方式是使用异步加载图片的方式. 这是因为LIstView中显示的内容是分为两部加载的,第一次加载文本信息(包含图片的uri地址) ...

  5. Android ListView异步加载图片乱序问题,原因分析及解决方案

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/45586553 在Android所有系统自带的控件当中,ListView这个控件算是 ...

  6. Android之ListView异步加载图片且仅显示可见子项中的图片

    折腾了好多天,遇到 N 多让人崩溃无语的问题,不过今天终于有些收获了,这是实验的第一版,有些混乱,下一步进行改造细分,先把代码记录在这儿吧. 网上查了很多资料,发现都千篇一律,抄来抄去,很多细节和完整 ...

  7. android 解决listview.notifyDataSetChanged刷新时Imageloader加载图片闪烁问题

    今天,简单讲讲android里再listview调用notifyDataSetChanged刷新界面时,Imageloader加载图片会闪烁的问题. 最近,发现app里的listview图片会出现闪烁 ...

  8. Android实现ListView异步加载图片总结

    参考自http://blog.csdn.net/wanglong0537/article/details/6334005# http://www.cnblogs.com/slider/archive/ ...

  9. 又优化了一下 Android ListView 异步加载图片

    写这篇文章并不是教大家怎么样用listview异步加载图片,因为这样的文章在网上已经有很多了,比如这位仁兄写的就很好: http://www.iteye.com/topic/685986 我也是因为看 ...

  10. Android ListView 异步加载图片

    使用ListView.GridView来展示图片是项目中经常遇到的情况,这里使用官方文档的BitmapFun稍作修改实现ListView 异步加载图片效果. 实现原理:给ListView 注册一个 滚 ...

最新文章

  1. 英伟达CEO黄仁勋获芯片行业最高荣誉:他颠覆了计算!
  2. jeecg智能开发平台参与-2013年度中国优秀开源项目评比
  3. java layoutmanager_Java Swing 探索(一)LayoutManager
  4. 【Elasticsearch】es 5.3.0 bulk index 性能调优实践
  5. Postman接口压力测试
  6. win centos php语法,linux(centos5.5)/windows下nginx开启phpinfo模式功能的配置方法分享
  7. ScreenFlow for mac 录制视频的工具
  8. Hibernate一对多双向、单向
  9. 录屏软件——大黄蜂,rar压缩包,解压后直接安装使用即可
  10. python爬取b站up主粉丝信息_使用Python爬取B站数据
  11. 计算机组成原理实验 实验四:多周期CPU实验要求(源代码全)
  12. 恒生电子软件工程师面试
  13. python关键词占比_搜索关键词占比
  14. 已知三角形的三个点坐标,求三角形的面积
  15. android studio安装SDK时无法勾选
  16. python之路day3_python之路:day3
  17. IT行业男性出轨率最高!
  18. (ACWing217)绿豆蛙的归宿(数学期望)
  19. 什么是ThreadLocal?ThreadLocal基本使用
  20. 你会制作点赞吗?(含动图)

热门文章

  1. 文件夹里面的文件批量改名字
  2. java.util.ConcurrentModificationException when interation the list then remove
  3. react+mobx+jquery构建大型工具项目经验总结
  4. 树莓派内网穿透及其实现监控的相关整理
  5. 《UE4蓝图完全学习》笔记
  6. 在虚幻引擎5中构建你的首款游戏 - 10[完] - 特效音效镜头震动打包
  7. android调用java接口_java/Android 接口调用的几种写法
  8. hadoop运行程序时报错java.net.ConnectException: java.net.ConnectException: 拒绝连接;
  9. Windows下缺少Android licenses的奇怪路径问题
  10. 解决Could not build wheels for pikepdf which use PEP 517 and cannot be installed directly