ListView使用SimpleAdapter載入網路圖片
阿新 • • 發佈:2019-02-20
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中封裝好該段程式碼,也許還有其他用法吧。