Android中判斷l(xiāng)istview是否滑動到頂部和底部的實現(xiàn)方法
今天實現(xiàn)listview的下拉刷新和上拉加載的時候,遇到了一個問題,*就是說需要根據(jù)listview中滑動的位置來進(jìn)行下拉刷新和上拉加載。*
具體點,只有當(dāng)我的listview滑動到最頂部的時候,這時候下拉才執(zhí)行刷新操作;只有當(dāng)我的listview滑動到最底部的時候,這時候上拉才執(zhí)行加載操作。
那么怎么判斷l(xiāng)istview的滑動位置呢?其實還是比較好解決的,說一下我的想法:
頂部的判斷,根據(jù)listview中的第一個item距離listview頂部的距離是否為0。
底部的判斷,根據(jù)listview中的最后一個item的底部與第一個item的頂部的距離是否為整個listview的高度。
上面的兩個想法代碼實現(xiàn)如下:
private void setLiseners() {
// listview設(shè)置滑動監(jiān)聽
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)滾動到頂部了");
bl_down = true;// 可以下拉刷新了
}else {
// LogUtils.e("還沒到頂部");
bl_down = false;// 未滑動到頂部不讓下拉刷新
}
}
if(firstVisibleItem + visibleItemCount == totalItemCount){
View last_view = lsv_new_house.getChildAt(lsv_new_house.getChildCount() - 1);
// LogUtils.e("height = " + lsv_new_house.getBottom());// 最后一個item的底部與listview第一個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)滾動到最底部了");
bl_up = true;// 可以上拉加載了
}else {
// LogUtils.e("還沒到底部");
bl_up = false;// 未滑動到底部不讓上拉加載
}
}
}
});
}
代碼都是很簡單的,簡單說一下。獲取第一個item的view和最后一個item的view,并進(jìn)行相應(yīng)的判斷即可。
而且這樣判斷會更加的精確,因為只要ListView中第一個item出現(xiàn)在屏幕上端,即使只出現(xiàn)一部分,firstVisibleItem 的值也依然為0, onScroll()回調(diào)就會發(fā)生; 同樣ListView 的最后一個 item 即使只顯示一部分,((firstVisibleItem + visibleItemCount) == totalItemCount) 的值也是等于totalItemCount。
但是加了距頂部的距離和整個listview的高度判斷后,就可以做到精確的判斷了。
以上這篇Android中判斷l(xiāng)istview是否滑動到頂部和底部的實現(xiàn)方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Android中的Dalvik和ART詳解及區(qū)別分析
小編通過這篇文章給大家整理了什么是Dalvik和ART,并進(jìn)行了區(qū)別的分析,下面一起來看看。2016-07-07
Android自定義View之RadioGroup實現(xiàn)跨多行顯示
這篇文章主要介紹了Android自定義View之RadioGroup實現(xiàn)跨多行顯示,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-11-11
Android使用ContentResolver搜索手機通訊錄的方法
這篇文章主要介紹了Android使用ContentResolver搜索手機通訊錄的方法,結(jié)合實例形式分析了Android中ContentResolver操作手機通訊錄的具體步驟與相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2016-01-01
Android 獲取drawable目錄圖片 并存入指定文件的步驟詳解
這篇文章主要介紹了Android 獲取drawable目錄圖片 并存入指定文件,本文分步驟通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03
SafeList?in?Flutter?and?Dart小技巧
這篇文章主要為大家介紹了SafeList?in?Flutter?and?Dart小技巧,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
Android學(xué)習(xí)之介紹Binder的簡單使用
BInder方面的資料雖然感覺看的比較多,但是真正用的時候才發(fā)現(xiàn)有很多地方模棱兩棵的,所以,打算用一個實例再來鞏固一下binder的使用方法。這篇文章主要介紹了Android中Binder的簡單使用,文中給出詳細(xì)的示例代碼,需要的朋友可以參考下2016-12-12

