1. 程式人生 > >ListView使用SimpleAdapter載入網路圖片

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中封裝好該段程式碼,也許還有其他用法吧。