android listView的setOnScrollListener的使用
今天,简单讲讲如何使用
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() {@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {}@Overridepublic 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的使用相关推荐
- android ListView实现下拉上拉刷新功能
android ListView实现下拉上拉刷新功能 主ListView类: package com.carcare.refresh;/*** @file XListView.java* @packa ...
- Android ListView 疯狂之旅 之 《自定义下拉刷新功能的ListView》
效果图: 一 首先创建一个类,继承ListView,编写其构造方法 public class RefreshListView extends ListView {public RefreshListV ...
- android的listview多选功能,Android ListView实现单选及多选等功能示例
本文实例讲述了Android ListView实现单选及多选等功能的方法.分享给大家供大家参考,具体如下: 在项目中也遇到过给ListView的item添加选择功能.比如一个网购APP,有个历史浏览页 ...
- android ListView包含Checkbox滑动时状态改变
题外话: 在xamarin android的开发中基本上所有人都会遇到这个小小的坎,的确有点麻烦,当时我也折腾了好一半天,如果你能看到这篇博客,说明你和我当初也是一样的焦灼,如果你想解决掉这个小小的坎 ...
- Android ListView 自定义背景后 滚动时的背景变黑问题
ListView是常用的显示控件,默认背景是和系统窗口一样的透明色,如果给ListView加上背景图片,或者背景颜色时,滚动时listView会黑掉,原因是,滚动时,列表里面的view重绘时,用的依旧 ...
- Android listview viewholder
2019独角兽企业重金招聘Python工程师标准>>> Android ListView ViewHolder 利用adapter中的getView的 contentView 的复用 ...
- Android ListView常用用法
ListView是比较常用的控件,但一直都觉得创建ListView步骤有点繁琐,故在此总结一下,方便查阅. 程序效果是实现一个ListView,ListView里面有标题,内容和图片,并加入点击和长按 ...
- 【腾讯Bugly干货分享】Android ListView与RecyclerView对比浅析--缓存机制
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/5811d... 作者:黄宁源 一,背景 RecyclerView是谷歌官方出的一 ...
- Android ListView异步加载图片乱序问题,原因分析及解决方案
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/45586553 在Android所有系统自带的控件当中,ListView这个控件算是 ...
最新文章
- C++ 实现高精度的计算
- mysql 强制索引循序_mysql 强制走索引
- lvs主从服务器转发风暴(广播风暴、大流量)
- java foreach 跳过本次循环_【Java】对foreach循环的思考
- HDU 1159 Common Subsequence 动态规划
- Requirements Analysis with 'pseud-Formal' Method
- cookie与session
- 软件测试基础知识总结
- 后缀树后缀数组LCP
- 【分享】笔记本触控面板使用指南
- Aspnet Mvc 前后端分离项目手记(三)关于restful 风格Url设计
- ds18b20驱动程序Linux,基于linux下的ds18b20驱动程序的编写
- oracle12c创建监听,Oracle 12c为PDB创建专用监听
- OpenCV中使用Eigenfaces人脸识别器识别人脸实战(附Python源码)
- 【学习笔记】数字图像基础02
- Tokyo Dystopia 1000w数据测试
- 走在边缘地带上的百度,还是差了那么一点!
- 16篇论文入选AAAI 2021,京东数科AI都在关注什么?(附论文下载)
- 浏览器查看,请在微信客户端打开链接
- 7-3 JAVA-水仙花数 (20 分)
热门文章
- 在基于Jetty Fast CGI Proxy和php-fpm下配置Discuz
- OOo on ready---VB篇
- C# 2.0 套接字编程实例初探
- [Python]小甲鱼Python视频第048课(魔法方法:迭代器) )课后题及参考解答
- 使用SQL语句创建数据库2——创建多个数据库文件和多个日志文件
- VK Cup 2017 - Round 2
- Java System类
- Android 开源项目android-open-project工具库解析之(一) 依赖注入,图片缓存,网络相关,数据库orm工具包,Android公共库...
- Destroying the bus stations
- TabHost刷新activity的方法