ListView滑动过程中数据错乱

1. 概述

在开发过程中,肯定都遇到过 滑动ListView过程中,数据发生错乱的情况:
问题1>:ListView滑动过程中,背景颜色可能发生错乱;
问题2>:异步加载图片时,图片重复错乱;

2. 解决方案

1>:针对问题1:ListView滑动过程中,背景颜色可能发生错乱;

想要达到的效果是:前3项的颜色设置为砖红色,其余项颜色设置为默认色。
实际效果是:ListView滑动后,后面应该显示默认背景色的item,也会出现砖红色。
之前错误代码如下,没有写 else情况:

if(i < 3){
      view.setBackgroundColor(context.getResources().getColor(R.color.coupletwo));
}

原因是:ListView的缓存机制导致。由于滑动出屏幕的item,会被缓存下来并被复用。所以我们以为只要设置 i<3,就可以让前3项为砖红色,其余项为默认色。却忽略了除过前3项之外的一些item会去复用前3项的item,导致可能会出现相同背景色。
所以,当 i>=3 的某些行由于复用了 i<3 的某些行,造成背景也为砖红色,修改代码如下即可:

if(i < 3){
      view.setBackgroundColor(context.getResources().getColor(R.color.coupletwo));
}else{
      view.setBackgroundColor(context.getResources().getColor(R.color.background));
}
2>:针对问题2:图片重复问题:

比如:评论列表中需要显示用户头像和评论内容,从接口中获取头像下载地址 url,有的用户没有上传头像,有的上传头像,如果没有上传头像,那么这个地址为空,如果上传了,这个地址不为空。所以,在显示用户头像的时候需要在 getView方法中判断:
如果地址为空,就显示默认头像;
如果地址不为空,就下载头像;
代码如下:

       if(!brandItemInfo.getBrandImage().equal("")){
           //根据url loadImage
       }else{
           viewHolder.brandLogo.setImageResource(R.drawable.ic_default_head);
       }       

如果不进行else处理,那么原来显示头像的 ImageView 在 ListView滑动的时候会重复显示其他头像的图片。

你可能感兴趣的:(ListView滑动过程中数据错乱)