ListView中显示Bitmap图像

两种实现方法:

① 实现ViewBinder()接口

一般来说,在用simpleAdapter适配器时,我们所要显示的图片资源都是程序内的本地资源,而且是以资源的ID(Resources ID)形式来表现的。但是有时候我们需要用这个适配器来显示网上的远程图片时,该如何直接显示呢?方法是实现ViewBinder()这个接口,在里面定义数据和视图的匹配关系。实例代码如下:

    SimpleAdapter simpleAdapter = new SimpleAdapter(this, setData(),  
                    R.layout.list, new String[] {"Name", "Image" }, new int[] {  
                    R.id.list_Name, R.id.list_Image });  
            simpleAdapter.setViewBinder(new ListViewBinder());  
      
    private class ListViewBinder implements 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;  
            }  
              
        }   
重写SimpleAdapter

myAdapter listItemAdapter;
listItemAdapter =new myAdapter(this,listItem,R.layout.favlv,newString[]{"ItemImage","ItemTv"},newint[]{R.id.ItemImage,R.id.ItemTv});  
下面是myAdapter的实现方法:

    package com.BottomMenu;  
      
    import java.util.List;  
    import java.util.Map;  
      
    import android.content.Context;  
    import android.graphics.Bitmap;  
    import android.view.LayoutInflater;  
    import android.view.View;  
    import android.view.ViewGroup;  
    import android.widget.Checkable;  
    import android.widget.ImageView;  
    import android.widget.SimpleAdapter;  
    import android.widget.TextView;  
      
    public class myAdapter extends SimpleAdapter {  
      
     private int[] mTo;  
     private String[] mFrom;  
     private ViewBinder mViewBinder;  
      
     private List<? extends Map<String, ?>> mData;  
      
     private int mResource;  
     private int mDropDownResource;  
     private LayoutInflater mInflater;  
      
     public myAdapter(Context context, List<? extends Map<String, ?>> data,  
       int resource, String[] from, int[] to) {  
      super(context, data, resource, from, to);  
      mData = data;  
      mResource = mDropDownResource = resource;  
      mFrom = from;  
      mTo = to;  
      mInflater = (LayoutInflater) context  
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
     }  
      
     /** 
      * @see android.widget.Adapter#getView(int, View, ViewGroup) 
      */  
     public View getView(int position, View convertView, ViewGroup parent) {  
      return createViewFromResource(position, convertView, parent, mResource);  
     }  
      
     private View createViewFromResource(int position, View convertView,  
       ViewGroup parent, int resource) {  
      View v;  
      if (convertView == null) {  
       v = mInflater.inflate(resource, parent, false);  
      
       final int[] to = mTo;  
       final int count = to.length;  
       final View[] holder = new View[count];  
      
       for (int i = 0; i < count; i++) {  
        holder[i] = v.findViewById(to[i]);  
       }  
      
       v.setTag(holder);  
      } else {  
       v = convertView;  
      }  
      
      bindView(position, v);  
      
      return v;  
     }  
      
     private void bindView(int position, View view) {  
      final Map dataSet = mData.get(position);  
      if (dataSet == null) {  
       return;  
      }  
      
      final ViewBinder binder = mViewBinder;  
      final View[] holder = (View[]) view.getTag();  
      final String[] from = mFrom;  
      final int[] to = mTo;  
      final int count = to.length;  
      
      for (int i = 0; i < count; i++) {  
       final View v = holder[i];  
       if (v != null) {  
        final Object data = dataSet.get(from[i]);  
        // if(data i)  
        String text = data == null ? "" : data.toString();  
        if (text == null) {  
         text = "";  
        }  
      
        boolean bound = false;  
        if (binder != null) {  
         bound = binder.setViewValue(v, data, text);  
        }  
      
        if (!bound) {  
         if (v instanceof Checkable) {  
          if (data instanceof Boolean) {  
           ((Checkable) v).setChecked((Boolean) data);  
          } else {  
           throw new IllegalStateException(v.getClass()  
             .getName()  
             + " should be bound to a Boolean, not a "  
             + data.getClass());  
          }  
         } else if (v instanceof TextView) {  
          // Note: keep the instanceof TextView check at the  
          // bottom of these  
          // ifs since a lot of views are TextViews (e.g.  
          // CheckBoxes).  
          setViewText((TextView) v, text);  
         } else if (v instanceof ImageView) {  
      
          if (data instanceof Integer) {  
           setViewImage((ImageView) v, (Integer) data);  
          } else if (data instanceof Bitmap) {  
           setViewImage((ImageView) v, (Bitmap) data);  
          }  
         } else {  
          throw new IllegalStateException(  
            v.getClass().getName()  
              + " is not a "  
              + " view that can be bounds by this SimpleAdapter");  
         }  
        }  
       }  
      }  
     }  
      
     public void setViewImage(ImageView v, int value) {  
      v.setImageResource(value);  
     }  
      
     public void setViewImage(ImageView v, Bitmap bm) {  
      ((ImageView) v).setImageBitmap(bm);  
     }  
      
    };  




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值