1、Android 常用適配器總結(jié),適配器 .顧名思義 ,就是把一些數(shù)據(jù)給弄得適當(dāng),適合以便于在 View 上顯示??梢钥醋魇墙缑鏀?shù)據(jù)綁定的一種理解。它所操縱的數(shù)據(jù)一般都是一些 比較復(fù)雜的數(shù)據(jù),如數(shù)組,鏈表,數(shù)據(jù)庫(kù),集合等。適配器 就像顯示器,把復(fù)雜的東西按人可以接受的方式來展現(xiàn)。那 么適配器是怎么處理得到的數(shù)據(jù),并把它顯示出來的呢。其 實(shí)很簡(jiǎn)單,說白了適配器它也是一個(gè)類,在類里面它實(shí)現(xiàn)了 父類的這幾個(gè)方法: publicint getCount() / 得到數(shù)據(jù)的行數(shù)public Object getItem(int position)/ 根據(jù) position 得到某一行 的記錄public
2、long getItemId(int position)/ 得到某一條記錄的 ID /下面這個(gè)方法是最重要的相比于其它幾個(gè)方法,它顯式的 定義了,適配器將要以什么樣的方式去顯示我們所填充的數(shù) 據(jù),在自定義的適配器里面我們通常會(huì)給它寫個(gè)布局文件publicView getView(int position, View convertView,ViewGroup parent) 我們常用的適配器一共有三個(gè), 當(dāng)然不 包含自定義的適配器,哪三個(gè) 那就是 ArrayAdapter ,SimpleAdapter ,SimpleCursorAdapter 這三個(gè), 他們都是繼承BaseAdapter其中以
3、 ArrayAdapter 最為簡(jiǎn)單,只能展示一行字。SimpleAdapter 有最好的擴(kuò)充性,可以自定義出各種效果。SimpleCursorAdapter 可以認(rèn)為是 SimpleAdapter 對(duì)數(shù)據(jù)庫(kù)的 簡(jiǎn)單結(jié)合,可以方面的把數(shù)據(jù)庫(kù)的內(nèi)容以列表的形式展示出 來。二,一般對(duì)于前兩個(gè)適配器, 他們的數(shù)據(jù)來源無非就是 String或者 List 。下面我們列舉兩個(gè)例一子: 例一,數(shù)組作為數(shù)據(jù)源,填充的是 ArrayAdapterpublic class Exampleextends ListActivityString sex = new String()" 男" , “
4、女” /數(shù)據(jù)源ArrayAda pter<String >ada pter;/ 數(shù)組適配器,用的是泛型public voidonCreate(Bundle SavedInstanceState)super.onCreate(SavedInstanceStat);/在對(duì)適配器初始化的時(shí)候,順便把數(shù)據(jù)源裝載到適配器里,/this.android.R.Layout.Simple_List_Item_1 這句話/的意思是將數(shù)據(jù)源以系統(tǒng)定義好的樣式放到適配器里 .adapter=newArrayAdapter<String(this.android.R.Layo
5、ut.Sim ple_List_Item_1,sex);this.setAdapter(adapter);/ 這是一個(gè)控件類,所以可以直接將適配器綁定到本身對(duì)象中充的是 SimpleAdapter例二: List 作為數(shù)據(jù)源, 填ListView list =(ListView)findViewById(R.id.MyListView);/生成動(dòng)態(tài)數(shù)組,并且轉(zhuǎn)載數(shù)據(jù)ArrayList<HashMap<String,String>> mylist = newArrayList<HashMap<String,Str
6、ing>>();for(int i=0;i<30;i+)HashMap<String, String>map = new HashMap<String,String>();map.put("ItemTitle","This is Title"map.put("ItemText","This is text"mylist.add(map);/生成適配器,數(shù)組 = ListItemSimpleAdapter mSchedu
7、le = newSimpleAdapter(this, / 沒什么解釋 mylist,/ 數(shù)據(jù)來源R.layout.my_listitem,/ListItem 的 XML 實(shí)現(xiàn) /動(dòng)態(tài)數(shù)組與ListItem 對(duì)應(yīng)的子項(xiàng)new String"ItemTitle", "ItemText", /ListItem 的 XML 文 件里面的兩個(gè) TextView ID new int R.id.ItemTitle,R.id.ItemText);/添加并且顯示list.setAdapter(mSchedule); 三,應(yīng)該說著兩個(gè)例子都不難,都是一些我們經(jīng)常見到的用
8、法,那么對(duì)于SimpleCursorAdapter又是怎么用的呢, SimpleCursorAdapter 一般主要用于數(shù)據(jù)庫(kù), 它的數(shù)據(jù)來源一般都是數(shù)據(jù)庫(kù)查詢得到的 Cursor 我們來看面的例子:String uriString =content:/contacts/people/Cursor myCursor=managedQuery(Uri.parse(uriString), null, null, null, null);String fromColumns = newStringPeople.NUMBER, People.NAME;int toLayoutIDs = new int
9、R.TextView, R.id.numberTextView;SimpleCursorAdapter myAdapter;myAdapter=newSimpleCursorAdapter(this,R.layout.simplecurs orlayout,myCursor,fromColumns,toLayoutIDs);/ 傳入當(dāng)前的上下文、個(gè) layout 資源,一個(gè)游標(biāo)和兩個(gè)數(shù)組:一個(gè)包含使用的列/的名字,另一個(gè)(相同大?。?shù)組包含 View 中的資源 ID ,用于顯示相應(yīng)列的數(shù)據(jù)值。myListView.setAdapter(myAdapter);我們把一個(gè)游標(biāo)綁定到了
10、 ListView 上,并使用自定義的layout 顯示來顯示每一個(gè) Item 。四,下面我們來定義自己的 適配器。為什么要定義自己的適配器呢,原因就在于,當(dāng)我們想用一些其它的展現(xiàn)方式,或者是我們需要的,呈現(xiàn) 方式,這是就得 DIY 了。首先我們定義一個(gè)類讓它繼承自BaseAda pter,再讓它實(shí)現(xiàn)里面所說的那幾個(gè)方法。那么這個(gè)自定義適配器就算好了。里面的一些方法我在上面都介紹過了,在這就不在贅述了。public class ImageAdapterextendsBaseAdapter privateContext mcontext;/構(gòu)造函數(shù)里面有兩個(gè)參數(shù),一個(gè)是數(shù)據(jù)的來源,另一個(gè)是上下文
11、。public ImageAdapter(IntegerimgIds,Context c)mcontext=c;imageIds=imgIds;publicint getCount() / TODOAuto-generated method stubposition) Auto-generated method stubposition) return imageIds.length;publicObject getItem(int/ TODOreturn null;publiclong getItemId(int/ TODOAuto-generated method stubreturn position;/主要工作是做在這里,可以自定義布局,在這里我就不多說了publicView getView(int position,View convertView, ViewGroup parent) / TODO Auto-generatedmethod stubImageViewimageview = newImageView(mcon