一、前言 習(xí)慣很多時(shí)候決定了我們的做法,而做法一定程度上又在鞏固我們的習(xí)慣。細(xì)想,這是一件很恐怖的事。所以很多時(shí)候要學(xué)會(huì)用一些新的方式去改變我們的習(xí)慣。做技術(shù),亦如此。很多時(shí)候,我們寫一個(gè)listview的adapter,總是會(huì)按照我們自己習(xí)慣的方式去寫,布局簡(jiǎn)單的還好,布局一復(fù)雜起來(lái),你就會(huì)看到你的類里面代碼幾百甚至上千行,這樣維護(hù)起來(lái)是很可怕的。而我個(gè)人的編程風(fēng)格是寧愿類多而不愿一個(gè)類里面的代碼多。所以很多東西都喜歡抽離出去,盡量讓代碼之間具有的耦合性降到最低。今天這里要介紹的一種方式是將adapter里面的getview代碼分離出一個(gè)類去,不要放在getview里面。讓你的adapter變得更加清爽,維護(hù)起來(lái)更加清晰有效,這種方法開始是看到一個(gè)github上面的國(guó)外大神寫的,經(jīng)過(guò)理解,自己也寫了一下,放在這里大家學(xué)習(xí)下。 二、實(shí)現(xiàn) 首先講一下思想,看一下getView這個(gè)方法先,這里其實(shí)是通過(guò)inflate返回了一個(gè)view,對(duì)了,這里的view是在我們寫的一個(gè)XML的文件解析出來(lái)的。所以我們能不能這樣做,自定義一個(gè)view,而這個(gè)自定義的view就是我們那個(gè)listview的一個(gè)item的布局,然后這個(gè)view就單獨(dú)作為一個(gè)類存在著,只要getView用到了,我們就new出這個(gè)自定義的view,讓它return。確實(shí),完全可以這樣做的。而關(guān)于這種方式的好處,后面還會(huì)介紹到。 現(xiàn)在思想有了,具體怎樣實(shí)現(xiàn)比較合理,就可以小思考下咯。盡量設(shè)計(jì)得通用,方便最好。 上代碼解釋: 1、首先定義一個(gè)接口,用來(lái)綁定控件,這里用泛型是為了通用性。 package com.kroc.adapter;/** * 綁定控件接口 * @author 林楷鵬 * @date 2014-12-9 下午9:45:25 */public interface IAdapterView package com.kroc.adapter;import android.content.Context;import android.content.Intent;import android.view.View;import android.widget.Button;import android.widget.LinearLayout;import android.widget.TextView;import com.kroc.adapterdemo.R;import com.kroc.main.FoodBO;import com.kroc.main.TestActivity;/** * item布局對(duì)應(yīng)的view * @author 林楷鵬 * @date 2014-12-9 下午9:49:01 */public class FoodListItemView extends LinearLayout implements IAdapterView 4、然后這里就是適配器,注意一下,這里是為了顯示這種做法的簡(jiǎn)潔性,我特意寫了兩個(gè)布局,就是說(shuō)一個(gè)listview的item可以有不同的布局,往往用傳統(tǒng)方式寫的話,代碼會(huì)更多,但是在這里可以看到,我的getView里面就是短短幾行代碼,如此簡(jiǎn)潔。(其他代碼點(diǎn)擊下面下載代碼去看)。這里可以回想一下,我們平時(shí)做這種有多種布局的item是如何做的,是不是把所有的view加載綁定都寫到getView里面了,那樣是不是讓你的代碼變得格外臃腫不堪呢?而通過(guò)這種方式,你就可以將不同的布局寫到不同的類中去,需要用到的時(shí)候再new出來(lái)就行。 package com.kroc.adapter;import android.content.Context;import android.view.View;import android.view.ViewGroup;import com.kroc.main.FoodBO;/** * @author 林楷鵬 * @description 食物列表適配 * @create 2014-11-24下午2:37:25 * */public class MyAdapter extends CommonBaseAdapter 關(guān)于定義接口的好處:泛型是一個(gè)好處,可以適配不同的數(shù)據(jù)類型,另外,可以將要顯示的item布局都實(shí)現(xiàn)接口,這樣的話就可以實(shí)現(xiàn)多態(tài)了。下面看看效果圖,從下面的圖片可以看到確實(shí)也實(shí)現(xiàn)了我們要的效果。 另外這樣做還有一個(gè)好處,就是代碼的復(fù)用性,假如你有兩個(gè)地方都用到同一個(gè)布局,那么通過(guò)這種方式,你就可以在兩個(gè)地方new兩個(gè)view就行,不用在兩個(gè)地方將代碼碼兩遍,那樣很煩的。 其他代碼不做多解釋,還是老規(guī)矩。要了解的點(diǎn)擊代碼下載 |
|
來(lái)自: 月冷星河 > 《Android文章》