android listView的setOnScrollListener的使用
来源:互联网 发布:下载办公软件ppt 编辑:程序博客网 时间:2024/06/09 17:15
今天,简单讲讲如何使用
listView的setOnScrollListener。
ListView是Android中最常用的控件之一,随着时代发展,RecyclerView有取代它的趋势,但是在一些老代码中,ListView依然扮演着重要的作用。
项目中遇到一个需求,需要监听ListView在滑动时滑动的Y轴坐标。这个需求在RecyclerView中computeVerticalScrollOffset方法完成了这项功能。只需要在OnScrollListener的onScrolled方法中,调用computeVerticalScrollOffset即可在滑动时获得Y坐标。
然而,在ListView中,这个实现却没有这么方便。
在ListView中,setOnScrollListener(new AbsListView.OnScrollListener(),可以获得以下两个方法:
1)public void onScrollStateChanged(AbsListView view, int scrollState)
2)public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
方法1 监听着ListView的滑动状态改变。官方的有三种状态SCROLL_STATE_TOUCH_SCROLL、SCROLL_STATE_FLING、SCROLL_STATE_IDLE:
SCROLL_STATE_TOUCH_SCROLL:手指正拖着ListView滑动
SCROLL_STATE_FLING:ListView正自由滑动
SCROLL_STATE_IDLE:ListView滑动后静止
方法2 监听滑动:
firstVisibleItem:第一个可见项是ListView的第几项
visibleItemCount:可见项的总数
totalItemCount:总项数
下面举一个例子:
listView.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { /** firstVisibleItem表示在现时屏幕第一个ListItem(部分显示的ListItem也算)在整个ListView的位置(下标从0开始) **/ Log.i("firstVisibleItem", String.valueOf(firstVisibleItem)); /** visibleItemCount表示在现时屏幕可以见到的ListItem(部分显示的ListItem也算)总数 **/ Log.i("visibleItemCount", String.valueOf(visibleItemCount)); /** totalItemCount表示ListView的ListItem总数 **/ Log.i("totalItemCount", String.valueOf(totalItemCount)); /** listView.getFirstVisiblePosition()表示在现时屏幕第一个ListItem(第一个ListItem部分显示也算)在整个ListView的位置(下标从0开始) **/ Log.i("firstPosition", String.valueOf(listView.getFirstVisiblePosition())); /** listView.getLastVisiblePosition()表示在现时屏幕最后一个ListItem(最后ListItem要完全显示出来才算)在整个ListView的位置(下标从0开始) **/ Log.i("lasPosition", String.valueOf(listView.getLastVisiblePosition())); }});
其中,onScrollStateChanged函数在listview状态改变时会调用,我们可以通过这个做一下操作。比如当listview状态为SCROLL_STATE_IDLE(停止滑动的状态)时,获取当前可见的itemView。
另一个onScroll函数会不停的调用,可以获取当前第一个可见的view的位置和总的可见的itemView的数目。
这里讲讲如何获取第一个itemView:
首先说,listview有个getChildAt(int position)的方法,但是这个方法只计算可视的item,也就是说position只是从第一个可以看到的item算起的,这样就和实际获取的position是不一样的。
直接说解决方法吧:
listview.getChildAt(position-listview.getFirstVisiblePosition());
listview.getFirstVisiblePosition()获取的是第一个可视item在整个listview中的position,这样经过简单的计算就可以获取到我们需要的item的view对象了。
android listView的setOnScrollListener的使用就讲完了。
就这么简单。
- android listView的setOnScrollListener的使用
- ListView的setOnScrollListener
- ListView的 setOnScrollListener
- listView的setOnScrollListener事件
- listview、gridview的setOnScrollListener使用(个人笔记)
- listView.setOnScrollListener
- android开发之ListView.setOnScrollListener()略谈
- 安卓 listView的点击监听和滑动监听 setOnScrollListener setOnTouchListener
- android ListView的使用
- Android ListView的使用
- Android ListView的使用
- android - ListView的使用。
- android - ListView的使用
- Android ListView的使用
- android listView的使用
- Android Listview的使用
- android - ListView的使用。
- Android,ListView的使用
- JS——坑6(this)
- 垃圾回收
- 写给非技术人员的机器学习指南
- java-static(静态)
- 唯快不破:HTTP协议状态码的含义
- android listView的setOnScrollListener的使用
- ubuntu安装teamviwer
- 【Scikit-Learn 中文文档】半监督学习
- 互联网协议入门
- SQL Server 索引和视图
- 浅析各类排序算法(八) 归并排序
- 检测总结
- 唯快不破:TCP/IP详解--TCP/IP工作流程
- iOS11中AppIcon设置无效的问题