高階控制項ListView

2021-08-30 08:58:11 字數 3122 閱讀 2241

筆記:

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、繫結介面卡

高階控制項ListView

baseadapter 是所有介面卡類的父類,可以對列表項進行最大限度的定製 1.1 自定義介面卡中的方法 getcount getview getitem getitemid 1.2 layoutinflater 布局解析器 layoutinflater有三種獲得方式,資料中有詳細介紹 用來把la...

高階控制項listview

baseadapter 是所有介面卡類的父類,可以對列表項進行最大限度的定製 1.1 自定義介面卡中的方法 getcount getview getitem getitemid 1.2 layoutinflater 布局解析器 layoutinflater有三種獲得方式,資料中有詳細介紹 用來把la...

高階控制項ListView

baseadapter 是所有介面卡類的父類,可以對列表項進行最大限度的定製 1.1 自定義介面卡中的方法 getcount getview getitem getitemid 1.2 layoutinflater 布局解析器 layoutinflater有三種獲得方式,資料中有詳細介紹 用來把la...