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

