《Android》『GridView』- 網格視圖元件的基本用法、如何避免 OnItemClickListener 失效

《Android Developers 參考文獻》

➥GridView

 

《簡單介紹》

GridView 是一種網格視圖圖庫的瀏覽元件,它可以將資料以網格的方式排列,在自訂 GridView 介面的實作方法上,它與之前所介紹的 SpinnerGallery 以及 ListView 一樣,都可以透過自訂一個繼承 BaseAdapter 的 Adapter,客製化出自己想要的介面。這邊我們就不再贅述,這篇主要要來說明的是,當自訂的 item 介面裡的元件有另外實作按鈕功能時,要如何讓 AdapterView.OnItemClickListener 的事件與該按鈕的事件不互相衝突。

➥自訂一個繼承 BaseAdapter 的 Adapter 以實作 GridView

➥避免 item 介面裡的按鈕事件導致 AdapterView.OnItemClickListener 事件失效

自訂一個 Adapter 以實作 GridView

這邊直接透過程式碼片段,說明如何透過自訂一個繼承 BaseAdapter 的 Adapter,以實作 GridView。

GridViewAdapter.java

在此範例中,我們想為 item 中的 imgView 元件設定按鈕監聽器,我們都知道 item 的概念其實是一個類似藍圖的框架,在 getView 中,Adapter 其實是根據其所傳入的 position 參數,一直取得並定義在不同欄位的 item 介面資訊,因此,若要在 item 裡面定義按鈕監聽器,我們就必須自訂一個實作 OnClickListener 介面的類別(ItemButton_Click),且此類別需傳入其 item 的位置(position),以定義不同位置的動作。

grid_view_item.xml

我們自訂了一個名為 grid_view_item.xml 的介面,裡面包含了一個 ImageView 與 TextView,並在GalleryAdapter 中的 getView() 方法中指定這個介面為每個 item 的 layout。接著,在 MainActivity 中宣告 GridView 並使用定義好的 GridViewAdapter,程式碼片段如下 –

MainActivity.java

activity_main.xml

string.xml

避免 item 介面裡的按鈕事件衝突

做到這裡,如果有將程式碼實際跑過的人會發現,在 MainActivity 中所設定的 AdapterView.OnItemClickListener 事件失效了,這是因為我們為每個 Item 中的 imgView 加入了按鈕事件的緣故,要解決這個問題,我們把觸發按鈕事件的元件之 focusable 設定為false(android:focusable=”false”) 即可。這種現象不僅僅是在 GridVeiw,在同樣以 Adapter 定義資料內容的 SpinnerGallery 以及 ListView 中,處理方式也是相同的。

賽肥膩膩

我們是低調到不行的肥膩夫妻檔,一路上一邊吵鬧一邊記錄著生活大小事,偶爾一起暴飲暴食再偶爾一起節食減肥,最沒恆心與毅力但一路走來也持續減肥了好幾次,我們重量不重質,所以完全沒有效果也是理所當然的事。

上 / 下一篇文章

臉書留言

一般留言

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *