《Android》『ListView』- 自訂一個繼承 BaseAdapter 的 Adapter 以實現客製化 ListView

《Android Developers 參考文獻》

➥ListView

 

《簡單介紹》

在了解 ListView 的靜態載入動態載入的方式後,我們對於基本的 ListView 建構已經可以非常迅速地完成,但現在問題來了,若是我們想要有一個完全客製化的 ListView 時,該怎麼做呢?前面我們有提到,ListView 類別是負責將列表顯示在螢幕上,而 Adapter 類別負責處理資料內容與介面的連結,也因此,就像之前介紹過的 Spinner 元件一樣,若是想要有一個客製化的介面,我們必須從改寫 Adapter 來著手。

 

《自訂一個繼承 BaseAdapter 的 Adapter》

BaseAdapter 為一個用來實作 ListAdapter 和 SpinnerAdapter 介面的抽象類別,透過繼承 BaseAdapter,我們可以重新覆寫其中的幾個抽象方法,條列如下 –

public int getCount();

取得 ListView 列表 Item 的數量。通常數量就是從建構子傳入的陣列或是集合大小。

public Object getItem(int position);

取得 ListView 列表於 position 位置上的 Item。position 通常是資料在陣列或是集合上的位置。

public long getItemId(int position);

取得 ListView 列表於 position 位置上的 Item 的 ID,一般用 position 的值即可。

public View getView(int position, View convertView, ViewGroup parent);

通常會設定與回傳 convertView 作為顯示在這個 position 位置的 Item 的 View。

這樣講可能還是有點抽象,以下透過程式碼片段,直接實作一個繼承自 BaseAdapter 的 Adapter,並命名為 ListAdapter。

ListAdapter.java

我們透過建構子傳入 ListView 的項目內容 mItemList,並且宣告一個名為 mLayInf 的 LayoutInflater,用以把 xml 表述的 layout 轉化為 View。 

在 getView() 中,我們宣告了一個 View 物件來定義 ListView 中顯示在這個 position 的 Item 的 View,因此為了要讓 ListView 使用自訂的介面,我們將 list_view_item.xml 透過 LayoutInflater 指定給它,在此範例中,我們沒有特別針對傳入的 position 參數設定不同的介面,也因此,ListView 的 Item 介面會一致的變成 list_view_item.xml 的樣式,接著,我們再將 list_view_item.xml 中所宣告的不同元件(ImageView, TextView)定義好行為即可。

list_view_item.xml

此 layout 中,每個 ListView 的 Item 皆包含了一個 ImageView 與 TextView,透過更詳細的設定 getView() 裡面的行為,我們還可以在每個 Item 中實現不同的動作。

MainActivity.java

activity_main.xml

strings.xml

在將自訂的 ListAdapter 建構好以後,接下來就是將其透過 ListView.setAdapter(ListAdapter)的方式傳入所需的 ListView 即可。

賽肥膩膩

我們是低調到不行的肥膩夫妻檔,一路上一邊吵鬧一邊記錄著生活大小事,最近迷上了宅在家追劇,希望能透過文字將所有看過的影集好好紀錄,整理成屬於我們自己的回憶資料庫。

上 / 下一篇文章

臉書留言

一般留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *