




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2.4
AdapterView及其子類2.4
AdapterView及其子類AdapterView是一組重要的組件,AdapterView本身是一個(gè)抽象基類,它派生的子類在用法上十分相似,只是顯示界面上有一定的區(qū)別。AdapterView具有如下特征:
AdapterView繼承了ViewGroup,它的本質(zhì)是容器。
AdapterView可以包括多個(gè)“列表項(xiàng)”,并以合適的方式顯示出來(lái)。AdapterView顯示的多個(gè)“列表項(xiàng)”由Adapter提供。調(diào)用AdapterView的setAdapter(Adapter)方法設(shè)置Adapter即可。2.4.1 ListView和ListActivityListView是手機(jī)系統(tǒng)中使用非常廣泛的一種組件,它以垂直列表的形式顯示所有的列表項(xiàng)。生成列表視圖有如下兩種方式:直接使用ListView進(jìn)行創(chuàng)建。創(chuàng)建一個(gè)繼承ListActivity的Activity(相當(dāng)于該Activity顯示的組件為L(zhǎng)istView)。一旦在程序中獲得了ListView之后,接下來(lái)就需要為L(zhǎng)istView設(shè)置它要顯示的列表項(xiàng)了。在這一點(diǎn)上,ListView顯示出了AdapterView的特征:通過(guò)setAdapter(Adapter)方法為之提供Adapter,并由Adapter提供列表項(xiàng)即可。XML屬性說(shuō)明android:divider設(shè)置分割條樣式(顏色或者Drawable對(duì)象)android:dividerHeight設(shè)置分割條高度android:entries指定一個(gè)數(shù)組資源,用來(lái)填充ListView項(xiàng)android:footerDividersEnabled設(shè)置為false,則不在footerview之前繪制分割條android:headerDividersEnabled設(shè)置為false,則不在headerview之后繪制分割條android:scrollbars設(shè)置是否顯示滾動(dòng)條android:fadingEdge設(shè)置是否去除ListView滑到頂部和底部時(shí)邊緣的黑色陰影android:listSelector設(shè)置是否去除點(diǎn)擊顏色android:cacheColorHint設(shè)置ListView去除滑動(dòng)顏色ListView常用的XML屬性<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><!--直接使用數(shù)組資源給listview添加列表項(xiàng)--><!--設(shè)置分割條的顏色--><!--設(shè)置分割條的高度--><ListViewandroid:id="@+id/listview1"android:layout_width="match_parent"android:layout_height="wrap_content"android:divider="#C4C4C4"
android:entries="@array/teacher_name"android:dividerHeight="1dp"></ListView></LinearLayout><?xmlversion="1.0"encoding="utf-8"?><resources><!--添加數(shù)組元素--><string-arrayname="teacher_name"><item>張三</item><item>李四</item><item>王五</item><item>趙六</item></string-array></resources>2.4.2Adapter接口Adapter本身只是一個(gè)接口,它派生了ListAdapter和SpinnerAdapter兩個(gè)子接口,其中ListAdapter為AbsListView提供列表項(xiàng),而SpinnerAdapter為AbsSpinner提供列表項(xiàng)。Adapter常用的實(shí)現(xiàn)類如下:
ArrayAdapter:支持泛型操作,最為簡(jiǎn)單,只能展示一行字。
SimpleAdapter:有最好的擴(kuò)充性,可以自定義出各種效果。BaseAdapter:是一個(gè)抽象類,繼承它需要實(shí)現(xiàn)較多的方法,所以也就具有較高的靈活性。實(shí)例一:基于ArrayApter創(chuàng)建ListViewpublicclassMainActivityextendsAppCompatActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.listview_layout);ListViewlistView=(ListView)findViewById(R.id.listview1);//定義一個(gè)數(shù)組,用來(lái)填充listviewString[]arr={"章節(jié)1","章節(jié)2","章節(jié)3"};
ArrayAdapter<String>adapter=newArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,arr);
//為listview設(shè)置adapterlistView.setAdapter(adapter);}}實(shí)例二:基于SimpleAdapter創(chuàng)建ListView<LinearLayoutxmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal"><!--定義一個(gè)ImageView組件,用來(lái)顯示頭像--><ImageViewandroid:id="@+id/icon"android:layout_width="wrap_content"android:layout_height="wrap_content"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><!--定義一個(gè)TextView組件,用來(lái)顯示名字--><TextViewandroid:id="@+id/name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="16sp"/><!--定義一個(gè)TextView組件,用來(lái)顯示人物的描述--><TextViewandroid:id="@+id/dexc"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="16sp"/></LinearLayout></LinearLayout>Activity代碼:publicclassMainActivityextendsActivity{//定義名字?jǐn)?shù)組privateString[]name={"張三","王五","趙六"};//定義描述任務(wù)數(shù)組privateString[]desc={"唱歌","跳舞","打球"};//定義頭像數(shù)組Privateint[]icon=newint[]{R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher};@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.listview_layout);ListViewlistView=(ListView)findViewById(R.id.listview1);//創(chuàng)建一個(gè)list集合,list集合的元素是MAPList<Map<String,Object>>list=newArrayList<Map<String,Object>>();for(inti=0;i<name.length;i++){Map<String,Object>listitem=newHashMap<String,Object>();listitem.put("icon",icon[i]);listitem.put("name",name[i]);listitem.put("desc",desc[i]);list.add(listitem);}//創(chuàng)建一個(gè)SimpleAdapter
SimpleAdapteradapter=newSimpleAdapter(this,list,R.layout.list_item_layout,newString[]{"name","icon","desc"},newint[]{R.,R.id.icon,R.id.dexc});
listView.setAdapter(adapter);}}使用SimpleAdapter最重要的是它的5個(gè)參數(shù),尤其是后面4個(gè),第二個(gè)參數(shù)是List<?ExtendsMap<String,?>>類型的集合對(duì)象,該集合中每個(gè)Map<String,?>對(duì)象生成一行;第三個(gè)參數(shù)是指定一個(gè)界面布局的ID,這里引用了一個(gè)自定義的布局list_item_layout.xml文件;第四個(gè)參數(shù)是String[]類型的參數(shù),該參數(shù)決定提取哪些內(nèi)容顯示在listview的每一行;最后一個(gè)是int[]類型的參數(shù),決定顯示哪些組件。實(shí)例三:基于BaseAdapter創(chuàng)建ListView在使用SimpleAdapter時(shí),用戶可以在布局當(dāng)中定義按鈕,但是當(dāng)用戶點(diǎn)擊時(shí),由于點(diǎn)擊操作被ListView的Item所覆蓋,導(dǎo)致按鈕無(wú)法獲取到焦點(diǎn),這時(shí)候最方便的方法就是使用靈活的適配器BaseAdapter了。BaseAdapter是最基礎(chǔ)的Adapter,具有全能性,不會(huì)像ArrayAdapter等的封裝好的類有那么多局限性,但是這樣的話,使用起來(lái)自然會(huì)更加麻煩一點(diǎn)。(1)自定義布局文件list_item_layout.xml作為每一行的布局樣式<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal"><LinearLayoutandroid:layout_width="200dip"android:layout_height="match_parent"android:orientation="horizontal"><ImageViewandroid:id="@+id/imageview"android:layout_width="50dip"android:layout_height="50dip"/><TextViewandroid:id="@+id/textview"android:layout_width="wrap_content"android:layout_height="match_parent"android:paddingTop="8dip"android:textSize="20sp"/></LinearLayout><Buttonandroid:id="@+id/button"android:layout_width="wrap_content"android:layout_height="wrap_content"/></LinearLayout>(2)自定義一個(gè)MyAdapter類繼承自BaseAdapter,然后重寫(xiě)里邊的方法publicclassMyAdapterextendsBaseAdapter{
privateList<Map<String,Object>>datas;privateContextmContext;publicMyAdapter(List<Map<String,Object>>datas,ContextmContext){this.datas=datas;this.mContext=mContext;}publicintgetCount(){//返回?cái)?shù)據(jù)的總數(shù)returndatas.size();}publicObjectgetItem(intposition){//返回在list中指定位置的數(shù)據(jù)的內(nèi)容returndatas.get(position);}publiclonggetItemId(intposition){//返回?cái)?shù)據(jù)在list中所在的位置returnposition;}(2)自定義一個(gè)MyAdapter類繼承自BaseAdapter,然后重寫(xiě)里邊的方法publicViewgetView(intposition,ViewconvertView,ViewGroupparent){finalViewHolderholder;
if(convertView==null){//使用自定義的布局文件作為L(zhǎng)ayoutconvertView=LayoutInflater.from(mContext).inflate(R.layout.list_item_layout,null);//減少findView的次數(shù)holder=newViewHolder();//初始化布局中的元素holder.mImageView=(ImageView)convertView.findViewById(R.id.imageview);holder.mTextView=(TextView)convertView.findViewById(R.id.textview);holder.mButton=(Button)convertView.findViewById(R.id.button);holder.mButton.setOnClickListener(newView.OnClickListener(){publicvoidonClick(Viewview){Toast.makeText(mContext,"你點(diǎn)了我!哈哈",Toast.LENGTH_SHORT).show();}});convertView.setTag(holder);}else{holder=(ViewHolder)convertView.getTag();}//從傳入的數(shù)據(jù)中提取數(shù)據(jù)并綁定到指定的view中holder.mImageView.setImageResource((Integer)datas.get(position).get("img"));holder.mTextView.setText(datas.get(position).get("title").toString());holder.mButton.setText(datas.get(position).get("button").toString());returnconvertView;}(2)自定義一個(gè)MyAdapter類繼承自BaseAdapter,然后重寫(xiě)里邊的方法staticclassViewHolder{ImageViewmImageView;TextViewmTextView;ButtonmButton;}}(3)MainActivity中添加數(shù)據(jù)以及為L(zhǎng)istView添加上文自定義的AdapterpublicclassMainActivityextendsActivity{
privateListViewmListView;privateMyAdaptermyAdapter;privateList<Map<String,Object>>list=newArrayList<Map<String,Object>>();
protectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initData();mListView=(ListView)findViewById(R.id.listview);myAdapter=newMyAdapter(list,this);mListView.setAdapter(myAdapter);}privatevoidinitData(){
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 昭通市綏江縣2025屆三下數(shù)學(xué)期末達(dá)標(biāo)檢測(cè)試題含解析
- 運(yùn)城幼兒師范高等??茖W(xué)?!妒称肺⑸锓治鰧?shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 石家莊職業(yè)技術(shù)學(xué)院《BIM技術(shù)與應(yīng)用》2023-2024學(xué)年第二學(xué)期期末試卷
- 免疫規(guī)劃精細(xì)化管理培訓(xùn)
- 信息技術(shù) 第二冊(cè)(五年制高職)課件 8.2.2 程序的基本結(jié)構(gòu)
- 中醫(yī)診斷緒論
- 養(yǎng)老院新員工入職培訓(xùn)
- 危大工程培訓(xùn)
- 閩粵贛三省十二校2025年高三3月份模擬考試化學(xué)試題含解析
- 小學(xué)生防誘騙安全教育
- 2022年湖北武漢中考滿分作文《護(hù)他人尊嚴(yán)燃生命之光》
- 三方代付工程款協(xié)議書(shū)范本2024年
- 有限空間作業(yè)氣體檢測(cè)記錄表
- 醫(yī)學(xué)課件抗痙攣體位擺放
- 《第2課 搜索技巧及信息篩選》參考課件
- 拖車(chē)協(xié)議合同范本(2024版)
- 幼升小必練20以內(nèi)加減法練習(xí)試題打印版
- DB32T 4787-2024城鎮(zhèn)戶外廣告和店招標(biāo)牌設(shè)施設(shè)置技術(shù)標(biāo)準(zhǔn)
- 農(nóng)村生活污水治理提升工程-初步設(shè)計(jì)說(shuō)明
- 財(cái)政投資評(píng)審咨詢服務(wù)預(yù)算和結(jié)算評(píng)審項(xiàng)目投標(biāo)方案(技術(shù)標(biāo))
- 學(xué)校食品安全工作領(lǐng)導(dǎo)小組及具體職責(zé)分工
評(píng)論
0/150
提交評(píng)論