ListView至簡

1:簡介

Android開發(fā)中ListView經(jīng)常會被用到,而和BaseAdapter搭配使用也是一種常用的選擇。但由于重寫B(tài)aseAdapter需要實現(xiàn)過多的抽象方法单绑,會導(dǎo)致代碼很長很冗余很不美觀嗦董。于是自己寫了個抽象類EasyAdapter繼承BaseAdaper以及一個ViewHolder抽象類EasyHolder(ViewHolder相信不用解釋大家也知道)若治,兩個類搭配使用以盡可能的減少代碼的重復(fù)居兆。

2:以前怎么寫

讓我們先看一下最原始的ListView加BaseAdapter的寫法:

代碼2-1

我們來看一下惰许,哪些代碼是冗余的,即不需要每次都寫史辙。

1:首先是BaseAdapter的三個抽象方法getCount(),getItem()佩伤,getItemId()聊倔,一般情況下他們的邏輯沒什么多大變動,所以可以認(rèn)為是冗余的生巡。

2:考慮一種情況耙蔑,有兩個頁面均使用ListView,且item布局可以共用孤荣。如果重寫一遍上面代碼就太煩了甸陌,兩者唯一不同也就是標(biāo)記1部分的代碼须揣,即更新顯示內(nèi)容的代碼。所以可以認(rèn)為在此情況下標(biāo)記2和標(biāo)記3處代碼冗余钱豁。

3:再考慮一種情況耻卡,這種情況可能用到比較少。還是有兩個頁面均使用ListView牲尺,且兩者item布局唯一不同之處就是組件布局不同卵酪,其他均一樣(包括組件個數(shù),組件id以及標(biāo)記1代碼部分邏輯)谤碳,此時如果重新寫一個BaseAdapter就更吃虧了溃卡,因為唯一不同之處就是標(biāo)記3處一行代碼,連標(biāo)記2處代碼兩者都是一樣的蜒简,因為剛才說了組件個數(shù)和id都一樣瘸羡。所以可以進(jìn)一步認(rèn)為在此情況下標(biāo)記2處冗余和標(biāo)記3處冗余可以進(jìn)一步細(xì)分。

3:現(xiàn)在怎么寫

我新建了一個抽象類EasyHolder和一個繼承BaseAdapter的抽象類EasyAdapter搓茬,下面將從上述三個冗余點著手分析這兩個類犹赖。

3.1:EasyHolder類

1:針對冗余1,實現(xiàn)getCount()垮兑,getItem()冷尉,getItemId()的默認(rèn)邏輯即可

2:針對冗余2和冗余3,我創(chuàng)建了一個EasyHolder抽象類系枪,代碼如下:

代碼3-1

該類設(shè)有三個抽象方法雀哨,分別對應(yīng)代碼2-1中的三個標(biāo)記點。標(biāo)記3處代碼對應(yīng)getLayout()方法私爷,標(biāo)記2處代碼對應(yīng)createView()方法雾棺,標(biāo)記3處代碼對應(yīng)refreshView()方法。

3.2:EasyAdapter代碼如下:

代碼3-2

該類提供了冗余1的默認(rèn)實現(xiàn)衬浑。用戶只需實現(xiàn)getHolder()這一抽象方法即可捌浩,其中type可用于ListView多類型時使用,單類型可忽略工秩。

4:舉個栗子

4.1:栗子1(單類型)

4.1.1:準(zhǔn)備

ListView的item布局item_person.xml如下尸饺,設(shè)有兩個TextView:

item_person.xml

設(shè)置一Bean類Person,設(shè)有三個屬性name助币、sex和type浪听,其中name和sex對應(yīng)item_person.xml中兩個TextView的顯示內(nèi)容,type將在下面第二個例子ListView多類型處使用:

代碼4-1

4.1.2:繼承EasyHolder

代碼4-2

可以發(fā)現(xiàn)代碼2-1中代碼其實是被分布到了上面三個方法中眉菱。

4.1.3:設(shè)置Adapter

代碼4-3

4.1.4:運行效果

代碼4-4

4.2栗子2(多類型)

4.2.1:準(zhǔn)備

在單類型基礎(chǔ)上新增一個布局item_child.xml迹栓,如下圖,該布局和item_parent.xml唯一不同就是組件排列方向不同俭缓,其他均一樣克伊,包括id酥郭。

item_child.xml

新增一Bean類Child,該類繼承Parent類愿吹,唯一不同就是type的值不从,該值用來區(qū)分ListView中item的類型:

代碼4-5

4.2.2:繼承EasyHolder,因其特殊性(符合冗余3)洗搂,即唯一不同就是標(biāo)記3處消返,所以只需重寫getLayout()方法即可:

代碼4-5

4.2.3:設(shè)置Adapter

代碼4-6

其中g(shù)etItemType具體邏輯不再贅述,getHolder只需根據(jù)type傳入相應(yīng)的EasyHolder即可。

4.2.4:運行效果圖

代碼4-7

5:最后附上Demo下載地址:

https://github.com/VolodymyrCj/workspace/tree/master/as_workspace/EasyAdapter

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末问慎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子倡勇,更是在濱河造成了極大的恐慌,老刑警劉巖嘉涌,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妻熊,死亡現(xiàn)場離奇詭異,居然都是意外死亡仑最,警方通過查閱死者的電腦和手機扔役,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來警医,“玉大人亿胸,你說我怎么就攤上這事≡せ剩” “怎么了侈玄?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長吟温。 經(jīng)常有香客問我序仙,道長,這世上最難降的妖魔是什么鲁豪? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任潘悼,我火速辦了婚禮,結(jié)果婚禮上爬橡,老公的妹妹穿的比我還像新娘挥等。我一直安慰自己,他們只是感情好堤尾,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著迁客,像睡著了一般郭宝。 火紅的嫁衣襯著肌膚如雪辞槐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天粘室,我揣著相機與錄音榄檬,去河邊找鬼。 笑死衔统,一個胖子當(dāng)著我的面吹牛鹿榜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播锦爵,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼舱殿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了险掀?” 一聲冷哼從身側(cè)響起沪袭,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎樟氢,沒想到半個月后冈绊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡埠啃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年死宣,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碴开。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡毅该,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出叹螟,到底是詐尸還是另有隱情鹃骂,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布罢绽,位于F島的核電站畏线,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏良价。R本人自食惡果不足惜寝殴,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望明垢。 院中可真熱鬧蚣常,春花似錦、人聲如沸痊银。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至贞绳,卻和暖如春谷醉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背冈闭。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工俱尼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人萎攒。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓遇八,卻偏偏與公主長得像,于是被迫代替她去往敵國和親耍休。 傳聞我的和親對象是個殘疾皇子刃永,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容