ListView使用SimpleAdapter加载非drawable资源图片

来源:互联网 发布:天津平面设计美工招聘 编辑:程序博客网 时间:2024/05/18 15:53

ListView是一种常见的布局,通过SimpleAdapter加载数据既省力又美观,常用做法如下:

 

Java代码  
[java] view plaincopy
  1. <a xmlns="http://www.w3.org/1999/xhtml">SimpleAdapter mySimpleAdapter = new SimpleAdapter (  
  2.                                                Context context,  
  3.                                                List<? extends Map<String, ?>> data,  
  4.                                                int resource,  
  5.                                                String[] from,  
  6.                                                int[] to)  
  7. myListview.setAdapter(mySimpleAdapter)</a>  

[java] view plaincopy
  1. SimpleAdapter mySimpleAdapter = new SimpleAdapter (  
  2.                                                Context context,  
  3.                                                List<? extends Map<String, ?>> data,  
  4.                                                int resource,  
  5.                                                String[] from,  
  6.                                                int[] to)  
  7. myListview.setAdapter(mySimpleAdapter)  

 其中Context为ListView的activity

data:          为加载的数据
resource:   为ListView中加载的布局文件
from:         为data中的map的key值,与to中一一对应
to:             表示resource中对应的布局文件中空间的id,通常为R.id.xxxx
这样的做法在实际运行中有一个问题,如果map中包含有图片,而这个图片不是在drawable中存在的,比如网络图片,simpleAdapter本身是不支持的,网上搜索了很多做法,有的是自己做一个Adapter然后继承SimpleAdapter ,自定义,我查阅文档发现了一个ViewBinder,该类可以帮助SimpleAdapter加载图片。

 

Java代码  
[java] view plaincopy
  1. <a xmlns="http://www.w3.org/1999/xhtml">SimpleAdapter mySimpleAdapter = new SimpleAdapter (  
  2.                                                Context context,  
  3.                                                 List<? extends Map<String, ?>> data,  
  4.                                                int resource,  
  5.                                                String[] from,  
  6.                                                int[] to);  
  7.   
  8. myListview.setAdapter(mySimpleAdapter)  
  9.   
  10. mySimpleAdapter.setViewBinder(new ViewBinder() {    
  11.                              public boolean setViewValue(  
  12.                                                  View view,   
  13.                                                  Object data,    
  14.                                               String textRepresentation) {    
  15.                                  //判断是否为我们要处理的对象    
  16.                                  if(view instanceof ImageView  && data instanceof Bitmap){    
  17.                                      ImageView iv = (ImageView) view;    
  18.                                      iv.setImageBitmap((Bitmap) data);    
  19.                                      return true;    
  20.                                  }else    
  21.                                  return false;    
  22.                              }    
  23.                          });  </a>  


[java] view plaincopy
  1. SimpleAdapter mySimpleAdapter = new SimpleAdapter (  
  2.                                                Context context,  
  3.                                                 List<? extends Map<String, ?>> data,  
  4.                                                int resource,  
  5.                                                String[] from,  
  6.                                                int[] to);  
  7.   
  8. myListview.setAdapter(mySimpleAdapter)  
  9.   
  10. mySimpleAdapter.setViewBinder(new ViewBinder() {    
  11.                              public boolean setViewValue(  
  12.                                                  View view,   
  13.                                                  Object data,    
  14.                                               String textRepresentation) {    
  15.                                  //判断是否为我们要处理的对象    
  16.                                  if(view instanceof ImageView  && data instanceof Bitmap){    
  17.                                      ImageView iv = (ImageView) view;    
  18.                                      iv.setImageBitmap((Bitmap) data);    
  19.                                      return true;    
  20.                                  }else    
  21.                                  return false;    
  22.                              }    
  23.                          });    

 ViewBinder是一个接口,判断传进来的Data,通常是Object类型,然后将其转换成为Bitmap,这样我觉得多此一举,为什么对于String类型的数据可以自动转换,而Bitmap就不能转换呢,而且程序在运行期其实可以判断View是什么类型的View,完全可以在SimpleAdapter中封装好该段代码,也许还有其他用法吧。

原创粉丝点击