溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

ListView設(shè)置headerview和footerview

發(fā)布時(shí)間:2020-06-10 12:21:28 來源:網(wǎng)絡(luò) 閱讀:704 作者:wjiaonianhua 欄目:web開發(fā)

【簡(jiǎn)介】
headerview就是通??吹降哪欠Nlistview手勢(shì)下滑露出上面的部分,下拉到一定位置,松手會(huì)開始請(qǐng)求網(wǎng)絡(luò)數(shù)據(jù),然后刷新listview的列表。
footerview一般就是listview手勢(shì)一直上滑動(dòng)到顯示出最后一條數(shù)據(jù),然后繼續(xù)按住滑動(dòng)到一定位置,再松手,會(huì)加載下一頁(yè)的數(shù)據(jù)。
注:除ListView之外,其它像scrollview,webview的header和footer和listview基本一致。


【屬性】
do平臺(tái)的listview有4個(gè)屬性來控制headerview和footview


* footerView        底部視圖,缺省為空,如果要設(shè)置值,只能設(shè)置成source://開頭的ui文件路徑,比如 "source://view/1.ui"
* headerView        表頭視圖,缺省為空,如果要設(shè)置值,只能設(shè)置成source://開頭的ui文件路徑,比如 "source://view/2.ui"
* isFooterVisible        是否顯示footerview,缺省為false,上滑動(dòng)到底部是看不到footerview,如果設(shè)置為true,但是footerview屬性為空的話,會(huì)出現(xiàn)一個(gè)缺省的footerview,應(yīng)付一些常用列表夠用了。如果需要自定義footerview,就需要設(shè)置footerView屬性
* isHeaderVisible        是否顯示headerview,缺省為false,和isFooterVisible原理一致。也有缺省的headerView和可自定義。


【事件】
* pull事件:對(duì)應(yīng)的是headerView
事件返回的data包含2個(gè)字段
1) data.state :狀態(tài),有0,1,2 三種狀態(tài),大概過程是
                 -- 手指按下開始往下拉,一直是狀態(tài)0,這個(gè)時(shí)候會(huì)觸發(fā)多次pull事件。這個(gè)狀態(tài)下松手就會(huì)自動(dòng)復(fù)原。
                 -- 手指下拉到一定位置,會(huì)切換到狀態(tài)1,這個(gè)只會(huì)觸發(fā)一次。這個(gè)狀態(tài)如果不松手指,而往上拉,又恢復(fù)到狀態(tài)0
                 -- 在狀態(tài)1下,松開手指,會(huì)切換到狀態(tài)2,這個(gè)只會(huì)觸發(fā)一次。這個(gè)時(shí)候松手headerview不會(huì)自動(dòng)復(fù)原,需要rebound方法
                             
2)data.offset: 偏移量,就是下拉的高度值,如果自定義headerview,可以根據(jù)這個(gè)高度值變化來切換一些變化,比如不斷的切換一個(gè)圖片,不斷的透明度變化等等。


* push事件:對(duì)應(yīng)的是footerView,基本和headerview完全一樣,只不過是方向相反。


【方法】
rebound:復(fù)位,也就是headerView拉下來或者footerView拉上來之后加載數(shù)據(jù)結(jié)束需要顯式的調(diào)用這個(gè)方法讓view復(fù)位隱藏


我們從demo上理解會(huì)更清楚一些。

 

先來看一個(gè)使用缺省的headerview和footerview的例子
ListView設(shè)置headerview和footerviewListView設(shè)置headerview和footerview


【屬性】:只需設(shè)置isFooterVisible和isHeaderVisible為true就可以了


【事件】:
* pull事件只需考慮state==2的情況就可以了,在狀態(tài)2下開始加載網(wǎng)絡(luò)數(shù)據(jù),然后更新listview對(duì)應(yīng)的listdata
這個(gè)http的下載只是模擬一個(gè)耗時(shí)的網(wǎng)絡(luò)操作,沒有其它意義


[mw_shl_code=javascript,true]listview.on("pull", function(data) {
        if (data.state == 2) {// 下拉到一定位置松手開始刷新數(shù)據(jù)
                http.download("data://temp.png");
        }
})[/mw_shl_code]



然后在http下載結(jié)束回調(diào)里更新數(shù)據(jù),復(fù)位headerview
[mw_shl_code=javascript,true]http.on("success", function(data) {
        listview.rebound();
        listdata.addOne(newdata, 0)
        listview.refreshItems();
});[/mw_shl_code]



* push事件類似,只考慮state==2的情況,在狀態(tài)2下加載新一頁(yè)的數(shù)據(jù),可以是本地的也可以是網(wǎng)絡(luò)的

[mw_shl_code=javascript,true]listview.on("push", function(data) {
        if (data.state == 2) {
                if (!added) {
                        storage.readFile("data://do_ListView/moremovie.json", function(data, e) {
                                listdata.addData(data);
                                listview.refreshItems();
                                added = true;
                        })
                }else{
                        nf.toast("數(shù)據(jù)已加載完!")
                }

                listview.rebound();
        }
})[/mw_shl_code]

源代碼參考附件或者h(yuǎn)ttps://github.com/do-project/doDemos/tree/master/do_ListView


接下來實(shí)現(xiàn)一個(gè)自定義的footerview和headerview的demo

 

自定義headerview和footerview
【簡(jiǎn)介】
最后效果是:

* 下拉h(huán)eaderview的時(shí)候headerview里的p_w_picpathview被一個(gè)label蓋住,拉的過程中l(wèi)abel的透明值變化,p_w_picpathview逐漸清晰,最后松手的時(shí)候顯示一個(gè)動(dòng)畫選擇的p_w_picpathview效果,加載數(shù)據(jù)結(jié)束后彈出一個(gè)提示框,最后再動(dòng)畫消隱。


* 上拉footerview比較簡(jiǎn)單,就加一個(gè)p_w_picpathview的旋轉(zhuǎn)動(dòng)畫
ListView設(shè)置headerview和footerviewListView設(shè)置headerview和footerview


【屬性】:比缺省的多設(shè)置2個(gè)屬性
* headerView:source://do_ListView/view/custom_head_foot_view/myheader.ui


* footerView: source://do_ListView/view/custom_head_foot_view/myfooter.ui


【事件】:在缺省的基礎(chǔ)上再觸發(fā)2個(gè)自定義消息mypull和mypush
[mw_shl_code=javascript,true]listview.on("pull", function(data) {
        page.fire("mypull", data);//觸發(fā)一個(gè)自定義事件給headerview
        if (data.state == 2) {// 下拉到一定位置松手開始刷新數(shù)據(jù)
                http.download("data://temp.png");
        }
})
var added = false;
listview.on("push", function(data) {
        page.fire("mypush", data);//觸發(fā)一個(gè)自定義事件給footerview
        if (data.state == 2) {
                if (!added) {
                        storage.readFile("data://do_ListView/moremovie.json", function(
                                        data, e) {
                                listdata.addData(data);
                                listview.refreshItems();
                                added = true;
                        })
                } else {
                        nf.toast("數(shù)據(jù)已加載完!")
                }

                listview.rebound();
        }
})[/mw_shl_code]



在myheader.ui.js里訂閱這個(gè)mypull消息,在state為0,1,2三種情況下分別處理


[mw_shl_code=javascript,true]var page = sm("do_Page");
page.on("mypull", function(data) {
        if (data.state == 2) {
                anim_p_w_picpathview.animate(anim);
                anim_p_w_picpathview.visible = true;
                p_w_picpathview.visible = false;
                label.text = "刷新中...";
        } else {
                anim_p_w_picpathview.visible = false;
                p_w_picpathview.visible = true;
                var alpha = 200 - 2 * Math.ceil(data.offset);
                if (alpha < 0)
                        alpha = 0;
                if (alpha < 16)
                        cover.bgColor = "0000000" + alpha.toString(16);
                else
                        cover.bgColor = "000000" + alpha.toString(16);
                if (data.state == 1) {
                        label.text = "松手開始刷新";
                } else { // (data.state==0)
                        label.text = "下拉刷新";
                }
        }
})[/mw_shl_code]


源代碼參考附件或者https://github.com/do-project/doDemos/tree/master/do_ListView


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI