首先我們知道,在Android中,Adapter本身是一個接口,他 派生了很多子接口,這些子接口又被很多具體的類實現,來實現具體的顯示效果。本次我們主要介紹的是SimpleAdapter實現類。
SimpleAdapter類:實際上SimpleAdapter並不簡單,而且他的功能非常強大,可以將List集合的多個對象封裝成列表項。
這就是我們經常需要用到的功能。例如:我們在手機上顯示東西的時候,每一個Item都會有 id、title、description、image之類的attribute,顯然是多個attribute,我們如何將這多個Item綁定來顯示在一個Item上面,這個就是我們要深入研究SimpleAdapter的原因。
下面看SimpleAdapter一個重要的構造函數:
公有構造函數
public SimpleAdapter (Context context, List> data, int resource, String[] from, int[] to)
構造函數
參數
context |
與 SimpleAdapter 關聯的運行著的視圖的上下文.
data |
Map 的列表.列表中的每個條目對應一行.Maps 中包含所有在 from 中指定的數據.
resource |
定義列表項目的視圖布局的資源 ID.布局文件至少應該包含在 to 中定義了的名稱.
from |
與 Map 中的項目建立關聯的列名的列表.
to |
用於顯示 from 中參數中的列的視圖列表.這些視圖應該都是 TextView 類型的. 該列表中的第 N 個視圖顯示從參數 from 中的第 N 列獲取的值.
但是一般情況下,我們發現image都是存放在Android自身的project裡面的drawable或者/res/raw文件夾裡面的,也就是剛剛開始的時候已經指定了,這時候這些圖片就會映射到R.java文件中,並以int的形式保存起來,那麼在調用的時候當然可以使用int類型了。
但是如果我們在開始的時候並不是直接在Android的project設置這些image的話,一個顯然的問題就出現了:由於不是事先在project設置的,這些image就不定自動導入到R.java文件中,當然也就不會以int類型保存了,那麼此時這個函數怎麼使用了。
下面我們就使用SimpleAdapter的嵌套類——SimpleAdapter.ViewBinder
該類用於 SimpleAdapter 的外部客戶將適配器的值綁定到視圖. 你可以使用此類將 SimpleAdapter 不支持的值綁定到視圖,或者改變 SimpleAdapter 支持的視圖的綁定方式.
公有方法 |
abstract boolean
setViewValue(View view, Object data, String textRepresentation) 綁定指定的數據到指定的視圖.
那麼下面我們就可以這樣使用SimpleAdapter的這個嵌套類來實現這個特定的功能了。
public void showDialog(Context context, final String template, int mode) {
ArrayList templateList = getTemplateList(template, mode);
LayoutInflater inflater = LayoutInflater.from(context);
final View dialog = inflater.inflate(R.layout.template, null);
ListView listView = (ListView) dialog.findViewById(R.id.mylist);
final List
/res/layout/dialog_layout.xml文件如下:
/res/layout/template.xml文件如下:
上面的顯示效果如下:
上面顯示的在運行的時候綁定Bitmap。