Android判断ListView滚动到最顶部第0条item完全完整可见及最底部最后一条item完全完整可见

给Android的ListView增加一个OnScrollListener监听事件:
mListView.setOnScrollListener(new OnScrollListener() {private int firstVisibleItem, visibleItemCount, totalItemCount;@Overridepublic void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {this.firstVisibleItem = firstVisibleItem;this.visibleItemCount = visibleItemCount;this.totalItemCount = totalItemCount;}@Overridepublic 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 ListView下拉/上拉刷新:设计原理与实现》链接地址:http://blog.csdn.net/zhangphil/article/details/47036177

更多相关文章

  1. 自定义Spinner五步走
  2. Android中设置控件可见与不可见详解
  3. AutoCompleteTextView(自动完成文本框)
  4. Android开源项目解析:PullToRefresh
  5. Android中visibility的3个属性说明
  6. JavaEye Android(安卓)client 收藏管理功能
  7. Android不用OnScrollListener采用GestureDetector结合OnTouchLis
  8. Android仿人人客户端(v5.7.1)——新鲜事之完整篇
  9. 打造android万能上拉下拉刷新框架——XRefreshView (二)

随机推荐

  1. Android系统体系结构分析
  2. 黑莓开发环境搭建windows7+eclipse+Black
  3. Android自定义漂亮的Dialog
  4. 物联网的现状与展望
  5. 谷歌Android应用大赛结果出炉 语音邮件应
  6. Android 集成 FFmpeg (一) 基础知识及简
  7. Android(安卓)Studio的设置
  8. Android的挫折开始了
  9. Android 18:9 全面屏第一坑
  10. Android 绘图基础:Path(绘制三角形、贝塞尔