Android中判斷l(xiāng)istview是否滑動(dòng)到頂部和底部的實(shí)現(xiàn)方法
今天實(shí)現(xiàn)listview的下拉刷新和上拉加載的時(shí)候,遇到了一個(gè)問(wèn)題,*就是說(shuō)需要根據(jù)listview中滑動(dòng)的位置來(lái)進(jìn)行下拉刷新和上拉加載。*
具體點(diǎn),只有當(dāng)我的listview滑動(dòng)到最頂部的時(shí)候,這時(shí)候下拉才執(zhí)行刷新操作;只有當(dāng)我的listview滑動(dòng)到最底部的時(shí)候,這時(shí)候上拉才執(zhí)行加載操作。
那么怎么判斷l(xiāng)istview的滑動(dòng)位置呢?其實(shí)還是比較好解決的,說(shuō)一下我的想法:
頂部的判斷,根據(jù)listview中的第一個(gè)item距離listview頂部的距離是否為0。
底部的判斷,根據(jù)listview中的最后一個(gè)item的底部與第一個(gè)item的頂部的距離是否為整個(gè)listview的高度。
上面的兩個(gè)想法代碼實(shí)現(xiàn)如下:
private void setLiseners() {
// listview設(shè)置滑動(dòng)監(jiān)聽(tīng)
lsv_new_house.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView absListView, int i) {
}
@Override
public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if(firstVisibleItem == 0){
View first_view = lsv_new_house.getChildAt(0);
if(first_view != null && first_view.getTop() == 0){
// LogUtils.e("已經(jīng)滾動(dòng)到頂部了");
bl_down = true;// 可以下拉刷新了
}else {
// LogUtils.e("還沒(méi)到頂部");
bl_down = false;// 未滑動(dòng)到頂部不讓下拉刷新
}
}
if(firstVisibleItem + visibleItemCount == totalItemCount){
View last_view = lsv_new_house.getChildAt(lsv_new_house.getChildCount() - 1);
// LogUtils.e("height = " + lsv_new_house.getBottom());// 最后一個(gè)item的底部與listview第一個(gè)item頂部之間的距離
// int h = lsv_new_house.getHeight();
// LogUtils.e("h = " + h);
if(last_view != null && last_view.getBottom() == lsv_new_house.getHeight()){
// LogUtils.e("已經(jīng)滾動(dòng)到最底部了");
bl_up = true;// 可以上拉加載了
}else {
// LogUtils.e("還沒(méi)到底部");
bl_up = false;// 未滑動(dòng)到底部不讓上拉加載
}
}
}
});
}
代碼都是很簡(jiǎn)單的,簡(jiǎn)單說(shuō)一下。獲取第一個(gè)item的view和最后一個(gè)item的view,并進(jìn)行相應(yīng)的判斷即可。
而且這樣判斷會(huì)更加的精確,因?yàn)橹灰狶istView中第一個(gè)item出現(xiàn)在屏幕上端,即使只出現(xiàn)一部分,firstVisibleItem 的值也依然為0, onScroll()回調(diào)就會(huì)發(fā)生; 同樣ListView 的最后一個(gè) item 即使只顯示一部分,((firstVisibleItem + visibleItemCount) == totalItemCount) 的值也是等于totalItemCount。
但是加了距頂部的距離和整個(gè)listview的高度判斷后,就可以做到精確的判斷了。
以上這篇Android中判斷l(xiāng)istview是否滑動(dòng)到頂部和底部的實(shí)現(xiàn)方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Android App卸載后跳轉(zhuǎn)到指定的反饋?lái)?yè)面的方法
這篇文章主要介紹了Android App卸載后跳轉(zhuǎn)到指定的反饋?lái)?yè)面的方法,關(guān)鍵點(diǎn)是相關(guān)線程要判斷在目錄被消除以前作出響應(yīng),需要的朋友可以參考下2016-04-04
Android開(kāi)發(fā)自學(xué)筆記(三):APP布局上
這篇文章主要介紹了Android開(kāi)發(fā)自學(xué)筆記(三):APP布局上,本文講解了添加ViewGroup、添加ViewGroup、定義string內(nèi)容、添加Button、運(yùn)行程序查看效果等內(nèi)容,需要的朋友可以參考下2015-04-04
深入剖析Android系統(tǒng)中Service和IntentService的區(qū)別
這篇文章主要介紹了Android系統(tǒng)中Service和IntentService的區(qū)別,與普通的服務(wù)相比,IntentService可以開(kāi)啟單獨(dú)的線程來(lái)處理intent請(qǐng)求,需要的朋友可以參考下2016-04-04
Android開(kāi)發(fā)之實(shí)現(xiàn)GridView支付寶九宮格
本文給大家介紹android開(kāi)發(fā)之實(shí)現(xiàn)gridview支付寶九宮格,其原理是讓每個(gè)item都設(shè)置成帶有分割線的背景,在這不透漏太多內(nèi)容,感興趣的朋友請(qǐng)閱讀全文2015-11-11
Android判斷設(shè)備網(wǎng)絡(luò)連接狀態(tài)及判斷連接方式的方法
這篇文章主要介紹了Android判斷設(shè)備網(wǎng)絡(luò)連接狀態(tài)及判斷連接方式的方法,涉及Android針對(duì)網(wǎng)絡(luò)連接的相關(guān)判定技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10
Android使用ShareSDK實(shí)現(xiàn)應(yīng)用分享的功能
這篇文章主要為大家詳細(xì)介紹了Android使用ShareSDK實(shí)現(xiàn)應(yīng)用分享的功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05

