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();
}
}
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();
}
}
相关文章推荐
- ListView+Adapter适配器的使用与Listview常见的UI显示问题
- listview常见问题整理
- listview之一些常见问题的解决方法
- ListView Adapter常见问题
- android listview选中某一行,成选中状态颜色高亮显示,ListView的UI显示中常见问题及解决办法
- React-native 常见问题:Warning 当使用组件 react-native-gifted-listview
- 安卓中常见ListView等加载Adapter后的错乱问题
- ExpandableListView常见问题
- Android ListView 常见问题汇总 checkbox 点击 复用混乱
- ListView常见问题一
- Android 编程下 ListView 和 CheckBox 混合使用时的常见问题
- ListView 中使用onItemClick和onItemLongClick的常见问题
- Android ListView常见属性问题
- ListView深入源码解析及其常见问题解决方案
- android ListView组件使用常见问题或形式总结(一)
- android ListView常见问题解决方法(滚动背景变黑,去除滑动时阴影,拖动时Item图片不显示)
- Android控件ListView常见问题指南
- ListView+Adapter适配器的使用与Listview常见的UI显示问题
- 【安卓学习之常见问题】 Listview的setOnItemLongClickListener无法进入问题
- ListView的优化以及常见问题