1.baseadapter:是所有介面卡類的父類,可以對列表項進行最大限度的定製
1.1 自定義介面卡中的方法
getcount
getview
getitem
getitemid
1.2 layoutinflater(布局解析器)
–layoutinflater有三種獲得方式,資料中有詳細介紹
用來把layout布局檔案解析成乙個view物件,不可以new,需要使用系統服務獲得
inflater = (layoutinflater) getsystemservice(context.layout_inflater_service);
案例一:listview的使用及優化
2. listview優化
2.1 使用convertview重用元件
即拖動時被遮住、看不見的控制項,重用它,而非每次建立乙個新的物件
2.2 使用內部類viewholder+convertview.settag()儲存控制項,而不用每次查詢
viewholder(檢視的持有者)
2.3 使用分頁查詢(pulltorefresh)
2.3.2 使用asynctask(非同步任務)載入資料,最少要重寫以下這兩個方法
doinbackground
後台執行
onpostexecute
在doinbackground方法執行結束之後在執行,並且執行在ui執行緒當中 可以對ui空間進行設定
關鍵**:
mylistviewadapter.notifydatasetchanged();// 通知介面卡資料已改變
ptrlv_main_1.onrefreshcomplete();// 通知控制項資料已經載入完畢
2.4 事件監聽的優化
假設item中有三個按鈕,要為三個按鈕定義事件,如果是下面這樣
btn1.setonclicklistener(new view.onclicklistener()
});btn2.setonclicklistener(new view.onclicklistener()
});btn3.setonclicklistener(new view.onclicklistener()
});如果每屏顯示10個item,那一共建立了30個listener物件在記憶體中。
如果,你是在adapter建立時,只建立乙個listener,並將其定義成全域性屬性,
然後通過按鈕的id來進行判斷是哪個事件應該觸發,
class myadapter extends baseadapterelse if(view.getid() == r.id.btn2)else if(view.getid() == r.id.btn3)
}});
}
//註冊***
btn1.setonclicklistener(mylistener);
btn2.setonclicklistener(mylistener);
btn3.setonclicklistener(mylistener);
第三方控制項:上拉載入、下拉重新整理控制項
3.1 匯入第三方外掛程式庫
android-pulltorefresh-master.zip
3.2 在布局檔案中使用第三方外掛程式
com.handmark.pulltorefresh.library.pulltorefreshlistview
3.3 自定義介面卡(baseadapter)提供資料
3.4 非同步任務查詢資料(asynctask)
3.4.1 asynctask定義了三種泛型型別 params,progress和result。
params 啟動任務執行的輸入引數,比如http請求的url。
progress 後台任務執行的百分比。
result 後台執行任務最終返回的結果,比如string
3.4.2 非同步載入資料最少要重寫以下這兩個方法
doinbackground(params…) 後台執行,比較耗時的操作都可以放在這裡
onpostexecute(result) 相當於handler 處理ui的方式,在這裡面可以使用在doinbackground 得到的結果處理操作ui
–注:此方法中再通知介面卡和控制項
mybaseadapter.notifydatasetchanged();// 通知介面卡資料已改變
plv_main_plv1.onrefreshcomplete();// 通知控制項資料已經載入完畢
3.5 給pulltorefreshlistview設定相關屬性
plv_main_1.setmode(mode.both);// 設定重新整理模式
mode.both:同時支援上拉下拉
mode.pull_from_start:只支援下拉pulling down
mode.pull_from_end:只支援上拉pulling up
plv_main_1.getloadinglayoutproxy().setpulllabel("上拉重新整理...");// 剛下拉時,顯示的提
plv_main_1.getloadinglayoutproxy().setrefreshinglabel("正在載入...");// 重新整理時
plv_main_1.getloadinglayoutproxy().setreleaselabel("放開重新整理...");// 下來達到一定距離時,顯示的提示
3.6 給pulltorefreshlistview設定介面卡
3.7 給pulltorefreshlistview設定***
***有二種:第一種上拉和下拉重新整理的效果是一樣的,要想實現上拉和下拉重新整理效果不一樣就要使用第二種
setonrefreshlistener/pulltorefreshbase.onrefreshlistener
setonrefreshlistener2/pulltorefreshbase.onrefreshlistener2
核心:
1、listview控制項、項資源、自定義介面卡準備好
2、向服務端拿資料
3、初始化自定義介面卡(獲取視**析器、得到項資源的view控制項、獲取所有的子控制項,給子控制項賦值、返回view)
4、繫結介面卡
Android高階控制項
高階控制項與低階控制項區別 是否使用介面卡 介面卡種類和作用 2.1 種類 陣列介面卡 arrayadapter new arrayadapter this,r.layout.actv style,names 簡單介面卡 adapter 也叫 並不簡單的簡單介面卡 自定義介面卡 2.2 作用 橋梁展...
Android高階之自定義控制項一
自定義控制項是判斷android工程師是否是高階工程師的一項基礎指標,如果你想拿到更高的薪水,那就必須的完全掌握這項技能。如何判斷自己是否完全掌握自定義控制項?其實很簡單,專案中遇到需要自定義控制項的模組是否產生過恐慌,如果你能應對自如,那說明你已經完全掌握了,若對你會造成恐慌也不必擔心,閱讀完這篇...
Android控制項
edittext是輸入文字框,可以進行文字編輯 imageview是顯示的乙個控制項 android id 控制項的id android layout width 控制項的寬度 android layout height 控制項的高度 還有一下屬性 android text 文字內容 android...