android笔记26 - SimpleAdapter 动态显示Bitmap图片

问题背景:
    在项目中用到SimpleAdapter 显示照片, 但是 SimpleAdapter 默认是静态显示程序内部的本地资源,即加载的是 R.drawable.id 这样的照片。如果我加载的是下载的Bitmap格式的图片,或者是SD卡自己存储的图片,那么这样是显示不出来的。

解决办法是:
 实现 ViewBinder接口,对两种的资源id和bitmap 情况进行说明。
说明代码说下:
SimpleAdapter saImageItems;
// 生成适配器的ImageItem <====> 动态数组的元素,两者一一对应
		saImageItems = new SimpleAdapter(this, 
				lstImageItem,				// 数据来源,也就是说网格视图里装载的数据内容
				R.layout.gridview,			// 网格视图里要显示的东西,这里是一副图像+下标文字	
				new String[] { "ItemImage", "ItemText" },// 动态数组与ImageItem对应的子项				
				new int[] { R.id.ItemImage, R.id.ItemText });// 显示ID号与上面的String[]元素一一对应
		saImageItems.setViewBinder(new ViewBinder() {
			
			@Override
			public boolean setViewValue(
					View view,
					Object data,
					String textRepresentation) {
				// TODO Auto-generated method stub
				 if((view instanceof ImageView) && (data instanceof Bitmap)) {  
		                ImageView imageView = (ImageView) view;  
		                Bitmap bmp = (Bitmap) data;  
		                imageView.setImageBitmap(bmp);  
		                return true;  
		            }  
				return false;
			}
		});

		expandListView.setOnChildClickListener(new OnChildClickListener() {

			@Override
			public boolean onChildClick(ExpandableListView parent, View v,
					int groupPosition, int childPosition, long id) {

				lstImageItem.clear();
				ArrayList> kidsArrayList = new ArrayList>();
				int classNum = (groupPosition+1)*100+childPosition+1;
				 kidsArrayList = MainTabActivity.returnDbClassInfo(classNum);
				int studentNum = kidsArrayList.size();
				for (int i = 0; i < studentNum; i++) {
					HashMap map = new HashMap();
					Bitmap bm = BitmapFactory.decodeFile(kidsArrayList.get(i).get("studentimage")); 
					
					map.put("ItemImage",bm);// 添加图像资源的ID
					
					map.put("ItemText",kidsArrayList.get(i).get("name") );// 按序号做ItemTex
				
					
					lstImageItem.add(map);
				}

				// 添加并且显示
				gridview.setAdapter(saImageItems);	

你可能感兴趣的:(Android)