位置: 編程技術(shù) - 正文
推薦整理分享Android之Adapter用法總結(jié)(安卓中adapter),希望有所幫助,僅作參考,歡迎閱讀內(nèi)容。
文章相關(guān)熱門搜索詞:android setadapter,android baseadapter,android adk,android setadapter,android adt,android baseadapter,android adt,安卓中adapter,內(nèi)容如對(duì)您有幫助,希望把文章鏈接給更多的朋友!
1.概念
Adapter是連接后端數(shù)據(jù)和前端顯示的適配器接口,是數(shù)據(jù)和UI(View)之間一個(gè)重要的紐帶。在常見的View(ListView,GridView)等地方都需要用到Adapter。如下圖直觀的表達(dá)了Data、Adapter、View三者的關(guān)系:
Android中所有的Adapter一覽:
由圖可以看到在Android中與Adapter有關(guān)的所有接口、類的完整層級(jí)圖。在我們使用過(guò)程中可以根據(jù)自己的需求實(shí)現(xiàn)接口或者繼承類進(jìn)行一定的擴(kuò)展。比較常用的有 BaseAdapter,SimpleAdapter,ArrayAdapter,SimpleCursorAdapter等。
BaseAdapter是一個(gè)抽象類,繼承它需要實(shí)現(xiàn)較多的方法,所以也就具有較高的靈活性;ArrayAdapter支持泛型操作,最為簡(jiǎn)單,只能展示一行字。SimpleAdapter有最好的擴(kuò)充性,可以自定義出各種效果。SimpleCursorAdapter可以適用于簡(jiǎn)單的純文字型ListView,它需要Cursor的字段和UI的id對(duì)應(yīng)起來(lái)。如需要實(shí)現(xiàn)更復(fù)雜的UI也可以重寫其他方法??梢哉J(rèn)為是SimpleAdapter對(duì)數(shù)據(jù)庫(kù)的簡(jiǎn)單結(jié)合,可以方便地把數(shù)據(jù)庫(kù)的內(nèi)容以列表的形式展示出來(lái)。2.應(yīng)用案例
1)ArrayAdapter
列表的顯示需要三個(gè)元素:
a.ListVeiw 用來(lái)展示列表的View。
b.適配器 用來(lái)把數(shù)據(jù)映射到ListView上的中介。
c.?dāng)?shù)據(jù) 具體的將被映射的字符串,圖片,或者基本組件。
案例一
案例二
上面代碼使用了ArrayAdapter(Context context, int textViewResourceId, List<T> objects)來(lái)裝配數(shù)據(jù),要裝配這些數(shù)據(jù)就需要一個(gè)連接ListView視圖對(duì)象和數(shù)組數(shù)據(jù)的適配器來(lái)兩者的適配工作,ArrayAdapter的構(gòu)造需要三個(gè)參數(shù),依次為this,布局文件(注意這里的布局文件描述的是列表的每一行的布局,android.R.layout.simple_list_item_1是系統(tǒng)定義好的布局文件只顯示一行文字,數(shù)據(jù)源(一個(gè)List集合)。同時(shí)用setAdapter()完成適配的最后工作。效果圖如下:
2)SimpleAdapter simpleAdapter的擴(kuò)展性最好,可以定義各種各樣的布局出來(lái),可以放上ImageView(圖片),還可以放上Button(按鈕),CheckBox(復(fù)選框)等等。下面的代碼都直接繼承了ListActivity,ListActivity和普通的Activity沒有太大的差別,不同就是對(duì)顯示ListView做了許多優(yōu)化,方面顯示而已。
案例一
simple.xml
案例二 下面的程序是實(shí)現(xiàn)一個(gè)帶有圖片的類表。首先需要定義好一個(gè)用來(lái)顯示每一個(gè)列內(nèi)容的xml,vlist.xml
使用simpleAdapter的數(shù)據(jù)用一般都是HashMap構(gòu)成的List,list的每一節(jié)對(duì)應(yīng)ListView的每一行。HashMap的每個(gè)鍵數(shù)據(jù)映射到布局文件中對(duì)應(yīng)id的組件上。因?yàn)橄到y(tǒng)沒有對(duì)應(yīng)的布局文件可用,我們可以自己定義一個(gè)布局vlist.xml。下面做適配,new一個(gè)SimpleAdapter參數(shù)一次是:this,布局文件(vlist.xml),HashMap的 title 和 info,img。布局文件的組件id,title,info,img。布局文件的各組件分別映射到HashMap的各元素上,完成適配。
運(yùn)行效果如下圖:
3)SimpleCursorAdapter
一定要以數(shù)據(jù)庫(kù)作為數(shù)據(jù)源的時(shí)候,才能使用SimpleCursorAdapter,這里特別需要注意的一點(diǎn)是:不要忘了在AndroidManifest.xml文件中加入權(quán)限
效果如下:
4)BaseAdapter
有時(shí)候,列表不光會(huì)用來(lái)做顯示用,我們同樣可以在在上面添加按鈕。添加按鈕首先要寫一個(gè)有按鈕的xml文件,然后自然會(huì)想到用上面的方法定義一個(gè)適配器,然后將數(shù)據(jù)映射到布局文件上。但是事實(shí)并非這樣,因?yàn)榘粹o是無(wú)法映射的,即使你成功的用布局文件顯示出了按鈕也無(wú)法添加按鈕的響應(yīng),這時(shí)就要研究一下ListView是如何現(xiàn)實(shí)的了,而且必須要重寫一個(gè)類繼承BaseAdapter。下面的示例將顯示一個(gè)按鈕和一個(gè)圖片,兩行字如果單擊按鈕將刪除此按鈕的所在行。并告訴你ListView究竟是如何工作的。
vlist2.xml
下面將對(duì)上述代碼,做詳細(xì)的解釋,listView在開始繪制的時(shí)候,系統(tǒng)首先調(diào)用getCount()函數(shù),根據(jù)他的返回得到listView的長(zhǎng)度(這也是為什么在開始的第一張圖特別的標(biāo)出列表長(zhǎng)度),然后根據(jù)這個(gè)長(zhǎng)度,調(diào)用getView()逐一繪制每一行。如果你的getCount()返回是0的話,列表將不顯示同樣return 1,就只顯示一行。
系統(tǒng)顯示列表時(shí),首先實(shí)例化一個(gè)適配器(這里將實(shí)例化自定義的適配器)。當(dāng)手動(dòng)完成適配時(shí),必須手動(dòng)映射數(shù)據(jù),這需要重寫getView()方法。系統(tǒng)在繪制列表的每一行的時(shí)候?qū)⒄{(diào)用此方法。getView()有三個(gè)參數(shù),position表示將顯示的是第幾行,covertView是從布局文件中inflate來(lái)的布局。我們用LayoutInflater的方法將定義好的vlist2.xml文件提取成View實(shí)例用來(lái)顯示。然后將xml文件中的各個(gè)組件實(shí)例化(簡(jiǎn)單的findViewById()方法)。這樣便可以將數(shù)據(jù)對(duì)應(yīng)到各個(gè)組件上了。但是按鈕為了響應(yīng)點(diǎn)擊事件,需要為它添加點(diǎn)擊監(jiān)聽器,這樣就能捕獲點(diǎn)擊事件。至此一個(gè)自定義的listView就完成了,現(xiàn)在讓我們回過(guò)頭從新審視這個(gè)過(guò)程。系統(tǒng)要繪制ListView了,他首先獲得要繪制的這個(gè)列表的長(zhǎng)度,然后開始繪制第一行,怎么繪制呢?調(diào)用getView()函數(shù)。在這個(gè)函數(shù)里面首先獲得一個(gè)View(實(shí)際上是一個(gè)ViewGroup),然后再實(shí)例并設(shè)置各個(gè)組件,顯示之。好了,繪制完這一行了。那再繪制下一行,直到繪完為止。在實(shí)際的運(yùn)行過(guò)程中會(huì)發(fā)現(xiàn)listView的每一行沒有焦點(diǎn)了,這是因?yàn)锽utton搶奪了listView的焦點(diǎn),只要布局文件中將Button設(shè)置為沒有焦點(diǎn)就OK了。
效果如下:
原文:
onSaveInstanceState和onRestoreInstanceState觸發(fā)的時(shí)機(jī) 當(dāng)某個(gè)activity變得容易被系統(tǒng)銷毀時(shí),該activity的onSaveInstanceState就會(huì)被執(zhí)行,除非該activity是被用戶主動(dòng)銷毀的,例如當(dāng)用戶按BACK鍵的時(shí)候。注意上面的
Android Volley框架的使用(三) Volley框架的學(xué)習(xí)馬上就可以殺青了,哈哈,有木有點(diǎn)小激動(dòng)呢,之所以將這個(gè)框架分成三篇來(lái)寫,而且涉及的細(xì)節(jié)比較多,是因?yàn)榭紤]到后面還要學(xué)習(xí)
歡迎使用CSDN-markdown編輯器 Android項(xiàng)目實(shí)訓(xùn)記錄(一)學(xué)校里來(lái)了某某IT培訓(xùn)機(jī)構(gòu)(為了避免廣告嫌疑,就不曝名字了)的講師來(lái)為我們進(jìn)行實(shí)訓(xùn),對(duì)于我這種從未接觸過(guò)正規(guī)項(xiàng)目
標(biāo)簽: 安卓中adapter
本文鏈接地址:http://esstyw.cn/biancheng/382293.html 轉(zhuǎn)載請(qǐng)保留說(shuō)明!上一篇:Android面試寶典(一位優(yōu)秀應(yīng)屆生面試經(jīng)驗(yàn),很多Android高階問(wèn)題)(android面試2021)
下一篇:onSaveInstanceState和onRestoreInstanceState觸發(fā)的時(shí)機(jī)
網(wǎng)站地圖: 企業(yè)信息 工商信息 財(cái)稅知識(shí) 網(wǎng)絡(luò)常識(shí) 編程技術(shù)
友情鏈接: 武漢網(wǎng)站建設(shè)