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

简介: Android判断ListView滚动到最顶部第0条item完全完整可见及最底部最后一条item完全完整可见给Android的ListView增加一个OnScrollListener监听事件:mListView.
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 ListView下拉/上拉刷新:设计原理与实现》链接地址:http://blog.csdn.net/zhangphil/article/details/47036177


相关文章
|
6月前
|
API Android开发 开发者
Android UI设计: 什么是RecyclerView?为什么它比ListView更好?
Android UI设计: 什么是RecyclerView?为什么它比ListView更好?
85 2
|
6月前
|
XML Java Android开发
Android Studio App开发中改造已有的控件实战(包括自定义支付宝月份选择器、给翻页栏添加新属性、不滚动的列表视图 附源码)
Android Studio App开发中改造已有的控件实战(包括自定义支付宝月份选择器、给翻页栏添加新属性、不滚动的列表视图 附源码)
117 1
|
4月前
|
XML Android开发 数据格式
Android 中如何设置activity的启动动画,让它像dialog一样从底部往上出来
在 Android 中实现 Activity 的对话框式过渡动画:从底部滑入与从顶部滑出。需定义两个 XML 动画文件 `activity_slide_in.xml` 和 `activity_slide_out.xml`,分别控制 Activity 的进入与退出动画。使用 `overridePendingTransition` 方法在启动 (`startActivity`) 或结束 (`finish`) Activity 时应用这些动画。为了使前 Activity 保持静止,可定义 `no_animation.xml` 并在启动新 Activity 时仅设置新 Activity 的进入动画。
105 12
|
4月前
|
Android开发 UED
Android采用Scroller实现底部二楼效果
Android采用Scroller实现底部二楼效果
38 0
Android采用Scroller实现底部二楼效果
|
5月前
|
Android开发 UED
Android Item平移动画
【6月更文挑战第18天】
109 8
|
5月前
|
API Android开发 开发者
`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView
【6月更文挑战第26天】`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView。它提供高效的数据视图复用,优化的布局管理,支持多种布局(如线性、网格),并解耦数据、适配器和视图。RecyclerView的灵活性、性能(如局部刷新和动画支持)和扩展性使其成为现代Android开发的首选,特别是在处理大规模数据集时。
65 2
|
5月前
|
Android开发 UED
|
5月前
|
前端开发 API Android开发
25. 【Android教程】列表控件 ListView
25. 【Android教程】列表控件 ListView
164 2
|
5月前
|
XML Java Android开发
Android RecyclerView用代码动态设置item的selector
Android RecyclerView用代码动态设置item的selector
42 0
|
6月前
|
XML Java Android开发
Android Studio App开发之实现底部标签栏BottomNavigationView和自定义标签按钮实战(附源码 超详细必看)
Android Studio App开发之实现底部标签栏BottomNavigationView和自定义标签按钮实战(附源码 超详细必看)
630 0