原创 Android笔记16- SimpleAdapter 动态显示Bitmap图片

2014-6-30 01:11 3737 23 23 分类: 软件与OS 文集: Android
问题背景:
    在项目中用到SimpleAdapter 显示照片, 但是 SimpleAdapter 默认是静态显示程序内部的本地资源,即加载的是 R.drawable.id 这样的照片。如果我加载的是下载的Bitmap格式的图片,或者是SD卡自己存储的图片,那么这样是显示不出来的。
 
解决办法是:
 实现 ViewBinder接口,对两种的资源id和bitmap 情况进行说明。
说明代码说下:
  1. SimpleAdapter saImageItems;  
  2. // 生成适配器的ImageItem <====> 动态数组的元素,两者一一对应  
  3.         saImageItems = new SimpleAdapter(this,   
  4.                 lstImageItem,               // 数据来源,也就是说网格视图里装载的数据内容  
  5.                 R.layout.gridview,          // 网格视图里要显示的东西,这里是一副图像+下标文字   
  6.                 new String[] { "ItemImage""ItemText" },// 动态数组与ImageItem对应的子项               
  7.                 new int[] { R.id.ItemImage, R.id.ItemText });// 显示ID号与上面的String[]元素一一对应  
  8.         saImageItems.setViewBinder(new ViewBinder() {  
  9.               
  10.             @Override  
  11.             public boolean setViewValue(  
  12.                     View view,  
  13.                     Object data,  
  14.                     String textRepresentation) {  
  15.                 // TODO Auto-generated method stub  
  16.                  if((view instanceof ImageView) && (data instanceof Bitmap)) {    
  17.                         ImageView imageView = (ImageView) view;    
  18.                         Bitmap bmp = (Bitmap) data;    
  19.                         imageView.setImageBitmap(bmp);    
  20.                         return true;    
  21.                     }    
  22.                 return false;  
  23.             }  
  24.         });  
  25.   
  26.         expandListView.setOnChildClickListener(new OnChildClickListener() {  
  27.   
  28.             @Override  
  29.             public boolean onChildClick(ExpandableListView parent, View v,  
  30.                     int groupPosition, int childPosition, long id) {  
  31.   
  32.                 lstImageItem.clear();  
  33.                 ArrayList> kidsArrayList = new ArrayList>();  
  34.                 int classNum = (groupPosition+1)*100+childPosition+1;  
  35.                  kidsArrayList = MainTabActivity.returnDbClassInfo(classNum);  
  36.                 int studentNum = kidsArrayList.size();  
  37.                 for (int i = 0; i < studentNum; i++) {  
  38.                     HashMap map = new HashMap();  ,>,>
  39.                     Bitmap bm = BitmapFactory.decodeFile(kidsArrayList.get(i).get("studentimage"));   
  40.                       
  41.                     map.put("ItemImage",bm);// 添加图像资源的ID  
  42.                       
  43.                     map.put("ItemText",kidsArrayList.get(i).get("name") );// 按序号做ItemTex  
  44.                   
  45.                       
  46.                     lstImageItem.add(map);  
  47.                 }  
  48.   
  49.                 // 添加并且显示  
  50.                 gridview.setAdapter(saImageItems);    
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
23
关闭 站长推荐上一条 /3 下一条