Himi原創,轉載務必注明出處!
原文地址: http://blog.csdn.net/xiaominghimi/archive/2011/04/11/6314704.aspx
ListView :在Android應用開發過程中屬于最常用的系統組件之一,當然可能童鞋們問為什么會突然游戲開發中講這個,呵呵,其實在游戲開發中,也會常常使用到系統組件,比如游戲排行榜,簡單的游戲關卡選擇等等,都可以來使用ListView來實現;
當然關于ListView我想大家都會使用了,那么這篇文章也不是跟大家講解ListView是如果使用的,而是如何實現自定義一個【通用】適配器類;
在ListView三種適配器當中,最受大家青睞的肯定就是SimpleAdapter適配器,用過的童鞋們都很清楚,它的擴展性很強,可以將ListView中每一項都使用自定義布局,插入N多組件;但是SimpleAdapter也有弱點,那就是當ListView中每一項有Button、CheckBox等這些有事件的組件,我們想監聽它們就必須自定義適配器!那么今天的重點也就是來講解一下如何寫一個自定義通用適配器類!
SimpleAdapter 構造的時候,我們知道需要五個參數來進行映射數據到ListView中,那么我們今天的自定義通用適配器其實也就是實現系統SimpleAdapter的一個自定義版;
OK,可能我說這么多,大家還是不太懂,其實今天要講述的自定義通用適配器優點有三點:
1.使用通用適配器就不需要每次使用自定義適配器的時候,都要去重新去寫一個,太累。。。。
2.構造方法與SimpleAdapter構造方法相同,五個參數也一摸一樣!
3.只需要在自定義的適配器類中,將我們需要監聽的組件進行設置監聽即可!別的代碼不需要去改動!
例如我們需要完成下圖這種ListView:
(圖1)
首先我們來完成ListView中每項的布局:
main.xml:
修改源碼:MainActivity.java:
到此,我們之前要求完成的(圖1)要求的ListView,[對ListView不太熟悉的童鞋自行百度google先學習一下基礎吧]
當然這里我們只是完成了界面,如果想監聽(圖1)中的按鈕和復選框事件,那么我們肯定需要自定義一個適配器,那么下面開始介紹如何實現通用適配器:
創建一個新類,類名:“MySimpleAdapter.java”繼承BaseAdapter:
備注1:這個For循環中是對ListView中每一項中包含所有的組件進行判定每個組件的類型,從而去設置其數據!
其中 《instanceof》這個關鍵字可能有的童鞋不太熟習,這個是對Object 類型的判斷;
這里我只是對ImageView、TextView的類型進行的數據識別,為什么我這里只寫了這兩種,那是因為Button、CheckBox等這些帶事件響應的組件是無法通過適配器映射到ListView上的;
其實關于適配器映射的機制,這里簡單說下:例如一個TextView組件,那么在ListView的每一項(List)中put()添加的時候,put()方法中第一個參數key大家知道是用于與適配器進行對應映射數據用的值,那么第二個參數其實就是put進組件的數據;其實當其數據反射在ListViw時,其實內部就是對組件進行實例化,并且對組件設置數據;
備注2 :我這里最后還有一個else{...}這里是留給童鞋們去擴展的,因為可能還有一些其他能映射的組件,所以這里留下接口,供大家擴展;
備注3:addListener(View convertView)這是我留出來的方法,童鞋們只需要將需要設置監聽事件的組件寫在這方法里就可以啦!
那么看一下我們使用通用監聽器的效果吧:
OK,很正常!那么在來看看使用系統的SimpleAdapter 與我們自定義的MySimpleAdapter代碼對比圖:
怎么樣!構造參數完全一樣,而且我們這個比它強大,我們只要去設置下需要監聽的組件監聽代碼就OK了。
娃哈哈,好啦,今天就到這里吧,希望此通用適配器對大家有用!
補充:大家使用自定義適配器的時候,有時候ListView每一項的焦點沒有了,比如本文中是因為Button和CheckBox截獲了焦點,童鞋們只要將button和checkBox的焦點設置不可見就OK啦。~
xml中focusable是這個屬性; android:focusable="false"
這里也提醒一下開發游戲的童鞋們,很多游戲開發者認為開發游戲不用去學習系統組件的使用,不用去沾染xml、布局啥的,其實這么想的童鞋們你們就大錯特錯了,Android之所以能這么火,其組件的美觀占了很重的份量,這么美的組件不用豈不是很浪費!!希望童鞋們對組件不熟悉的游戲開發者都要去學習學習下組件的使用!
源碼下載: http://download.csdn.net/source/3157277
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
