您的位置:首页 > 移动开发 > Android开发

ListView常见问题三

2017-03-27 14:08 232 查看
此篇接ListView常见问题二

Android-Universal-Image-Loader jar包下 listview item
图片重复问题


前篇介绍一了Android-Universal-Image-Loader jar包 Android-Universal-Image-Loader jar包有三个常用的组件DisplayImageOptions、ImageLoader、ImageLoaderConfiguration



此篇解决图片重复问题



item图片重复问题再次就不赘述了直接解决办法即为item中的imageview设置tag



1.Adapter中getview()方法操作

String path=list.get(arg0).getLogo();

if("".equals(path)||"null".equals(path)||null==path){//图片为空时设置默认图片

       vh.iv.setImageResource(R.drawable.companylogo_default);

}else{

       vh.iv.setTag(path);//为图片设置tag


       //获取Android-Universal-Image-Loader
jar下 内存缓存此图片的路径及图片


       String memoryCacheKey=ImageViewCachUtils.getmemoryCacheKey(vh.iv, path, 200, 200);

    if(!(TextUtils.isEmpty(memoryCacheKey))){

    bit=mca.get(memoryCacheKey);

        if((null!=bit)&&!(bit.isRecycled())){//不为空且没有被回收及即可用状态

        vh.iv.setImageBitmap(bit);

        }else{//为空 或是已经被回收即为不可用状态

        boolean b=ImageViewCachUtils.isInCache(path, urllist);

        if(b){

        vh.iv.setImageResource(R.drawable.companylogo_default);

        }else{

        BridgeBetweenCollegesStudentApplication.imageLoader.displayImage(path, vh.iv, options,new AnimateFirstDisplayListener());

        }

        }

    }else{

    BridgeBetweenCollegesStudentApplication.imageLoader.displayImage(path, vh.iv, options,new AnimateFirstDisplayListener());

    }


}

2.Adapter SimpleImageLoadingListener实现类操作

private class AnimateFirstDisplayListener extends SimpleImageLoadingListener {

@Override
public void onLoadingComplete(String imageUri, View view,Bitmap loadedImage) {
if(loadedImage!=null){
ImageView imageView=(ImageView) view;
String url=(String) imageView.getTag();//获取设置的imageviewtag
if((!TextUtils.isEmpty(url))&&(!TextUtils.isEmpty(imageUri))){
if(imageUri.equals(url)){//成功下载图片 并且位置对应
imageView.setImageBitmap(loadedImage);
}else{//虽然成功 但位置不对 即在滑动的过程中item 已近过去 获取相应位置缓存的图片
               bit=ImageViewCachUtils.getBitmapFormCache(mca, imageView, url, 200, 200);
               if(null!=bit){
               imageView.setImageBitmap(bit);
               }
}
}
}
}

@Override
public void onLoadingFailed(String imageUri, View view,FailReason failReason) {
super.onLoadingFailed(imageUri, view, failReason);
ImageView imageView=(ImageView) view;
String url=(String) imageView.getTag();
if((!TextUtils.isEmpty(url))&&(!TextUtils.isEmpty(imageUri))){
if(imageUri.equals(url)){//同上 下载失败 并且位置相同


                                        //由于下载失败 jar中源码未将图片放入缓存 所以要自己判断一下 

                                       //即下载失败的图片路径如果不在自己创建的集合中加入到集合

                                       //在getview方法中使用
imageView.setImageResource(R.drawable.companylogo_default);
boolean b=ImageViewCachUtils.isInCache(url, urllist);
if(!b){
urllist.add(url);
}
}else{//同上 虽然下载失败但位置不对 即在滑动的过程中item 已近过去 获取相应位置缓存的图片
               bit=ImageViewCachUtils.getBitmapFormCache(mca, imageView, url, 200, 200);
               if(null!=bit){
               imageView.setImageBitmap(bit);
               }
}
}
}
}


3.最后可以在页面返回的时候清空一下存在于内存中的缓存图片



public void clearBitmap(){
if(bit!=null){
if(!bit.isRecycled()){
bit.recycle();
}
}
if(mca!=null){
mca.clear();
}
}






内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息