Android判断ListView滚动到最顶部第0条item完全完整可见及最底部最后一条item完全完整可见
2015-12-16 20:21
507 查看
原博:http://blog.csdn.net/zhangphil
Android判断ListView滚动到最顶部第0条item完全完整可见及最底部最后一条item完全完整可见
给Android的ListView增加一个OnScrollListener监听事件:
追踪firstVisibleItem, visibleItemCount, totalItemCount的值得变化,有一个情况,这在自己写下拉刷新或者上拉刷新时候容易暴露出来,比如,代码目的是下拉见顶时候刷新,但是,ListView的机制将某一个item比如第一个item只要出现在可见视野不管是全部还是部分,都讲firstVisibleItem赋值为该item的position值,这在下拉/上拉刷新时候容易造成混淆,比如,ListView下拉见顶刷新出新数据后,如果此时手指稍稍往下滑一丁点儿(注意!此时顶部的第一条元素没有完全滚动出视野,而是部分被遮挡,但仍有部分item的view部分仍在可见视野内),此时停下手指不再滑动触发ListView的滚动事件,那么此时将再次进入OnScrollListener事件,同时
scrollState == OnScrollListener.SCROLL_STATE_IDLE
仍然成立!同时firstVisibleItem的值依然是0!这将再次触发刷新加载事件!
上拉见底部情况相同。
这显然不是一种完善的下拉或者上拉刷新的体验和设计。为解决此问题,可以在OnScrollListener内的事件回调监测方法内增加代码:
isTop为true则表示此时的ListView的第一条元素position=0,并且此时position=0的item完全完整显示在可见视野内(不是部分遮掩,不是部分显示)。与此相同,isBottom为true时候,表示此时的ListView最后一条元素完全完整的显示在可见视野内容。
Android判断ListView滚动到最顶部第0条item完全完整可见及最底部最后一条item完全完整可见
给Android的ListView增加一个OnScrollListener监听事件:
mListView.setOnScrollListener(new OnScrollListener() { private int firstVisibleItem, visibleItemCount, totalItemCount; @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { this.firstVisibleItem = firstVisibleItem; this.visibleItemCount = visibleItemCount; this.totalItemCount = totalItemCount; } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { if (scrollState == OnScrollListener.SCROLL_STATE_IDLE){ if(firstVisibleItem == 0){ //开始下拉见顶刷新 } if(mListView.getLastVisiblePosition()== (totalItemCount-1)){ //开始上拉见底刷新 } } } });
追踪firstVisibleItem, visibleItemCount, totalItemCount的值得变化,有一个情况,这在自己写下拉刷新或者上拉刷新时候容易暴露出来,比如,代码目的是下拉见顶时候刷新,但是,ListView的机制将某一个item比如第一个item只要出现在可见视野不管是全部还是部分,都讲firstVisibleItem赋值为该item的position值,这在下拉/上拉刷新时候容易造成混淆,比如,ListView下拉见顶刷新出新数据后,如果此时手指稍稍往下滑一丁点儿(注意!此时顶部的第一条元素没有完全滚动出视野,而是部分被遮挡,但仍有部分item的view部分仍在可见视野内),此时停下手指不再滑动触发ListView的滚动事件,那么此时将再次进入OnScrollListener事件,同时
scrollState == OnScrollListener.SCROLL_STATE_IDLE
仍然成立!同时firstVisibleItem的值依然是0!这将再次触发刷新加载事件!
上拉见底部情况相同。
这显然不是一种完善的下拉或者上拉刷新的体验和设计。为解决此问题,可以在OnScrollListener内的事件回调监测方法内增加代码:
//isTop:true表示ListView完全見頂部。isBottom:true,listview完全見底。 boolean isTop = false, isBottom = false; if ((visibleItemCount > 0) && (firstVisibleItem == 0)) { if (view.getChildAt(0).getTop() >= 0) { isTop = true; } } else if ((totalItemCount > 0) && (view.getLastVisiblePosition() == totalItemCount - 1)) { if (view.getBottom() == view.getChildAt( view.getChildCount() - 1).getBottom()) { isBottom = true; } }
isTop为true则表示此时的ListView的第一条元素position=0,并且此时position=0的item完全完整显示在可见视野内(不是部分遮掩,不是部分显示)。与此相同,isBottom为true时候,表示此时的ListView最后一条元素完全完整的显示在可见视野内容。
相关文章推荐
- Android中通过typeface设置字体
- Android 控件之ImageViewSwitcher图片切换控件
- android:versionCode 跟 android:versionName
- android开发中scrollview添加自定义view的滑动显示问题
- Android读书笔记之Fragment入门
- android判断当前系统的语言
- Android倒计时器——CountDownTimer
- Android倒计时器——CountDownTimer
- Android Studio项目应该提交哪些文件到GitHub上
- android studio 安装app失败(INSTALL_PARSE_FAILED_MANIFEST_MALFORMED)
- Activity平移动画
- 关于Android 相对布局中的属性 的介绍和运用
- android 为layout添加点击事件以及封装onclicklistener工具类
- Android绘图之绘制太极图
- Android ListView分类/分组效果 - 第二种实现方式
- Android蓝牙开发经验总结(一)
- 关于Android 设置监听的的四种方式的理解
- android之Listview的分组实现
- 关于Android 回调的小的案例
- Android gdb 调试