`
啸笑天
  • 浏览: 3438863 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

ListView使用SimpleAdapter加载网络图片

阅读更多

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

 

SimpleAdapter mySimpleAdapter = new SimpleAdapter (
                                               Context context,
                                               List<? extends Map<String, ?>> data,
                                               int resource,
                                               String[] from,
                                               int[] to)
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加载图片。

 

SimpleAdapter mySimpleAdapter = new SimpleAdapter (
                                               Context context,
                                                List<? extends Map<String, ?>> data,
                                               int resource,
                                               String[] from,
                                               int[] to);

myListview.setAdapter(mySimpleAdapter)

mySimpleAdapter.setViewBinder(new ViewBinder() {  
                             public boolean setViewValue(
                                                 View view, 
                                                 Object data,  
                                              String textRepresentation) {  
                                 //判断是否为我们要处理的对象  
                                 if(view instanceof ImageView  && data instanceof Bitmap){  
                                     ImageView iv = (ImageView) view;  
                                     iv.setImageBitmap((Bitmap) data);  
                                     return true;  
                                 }else  
                                 return false;  
                             }  
                         });  

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

分享到:
评论
1 楼 xdxiaotao 2012-05-07  

相关推荐

Global site tag (gtag.js) - Google Analytics