今天,简单讲讲如何使用



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的使用相关推荐

  1. android ListView实现下拉上拉刷新功能

    android ListView实现下拉上拉刷新功能 主ListView类: package com.carcare.refresh;/*** @file XListView.java* @packa ...

  2. Android ListView 疯狂之旅 之 《自定义下拉刷新功能的ListView》

    效果图: 一 首先创建一个类,继承ListView,编写其构造方法 public class RefreshListView extends ListView {public RefreshListV ...

  3. android的listview多选功能,Android ListView实现单选及多选等功能示例

    本文实例讲述了Android ListView实现单选及多选等功能的方法.分享给大家供大家参考,具体如下: 在项目中也遇到过给ListView的item添加选择功能.比如一个网购APP,有个历史浏览页 ...

  4. android ListView包含Checkbox滑动时状态改变

    题外话: 在xamarin android的开发中基本上所有人都会遇到这个小小的坎,的确有点麻烦,当时我也折腾了好一半天,如果你能看到这篇博客,说明你和我当初也是一样的焦灼,如果你想解决掉这个小小的坎 ...

  5. Android ListView 自定义背景后 滚动时的背景变黑问题

    ListView是常用的显示控件,默认背景是和系统窗口一样的透明色,如果给ListView加上背景图片,或者背景颜色时,滚动时listView会黑掉,原因是,滚动时,列表里面的view重绘时,用的依旧 ...

  6. Android listview viewholder

    2019独角兽企业重金招聘Python工程师标准>>> Android ListView ViewHolder 利用adapter中的getView的 contentView 的复用 ...

  7. Android ListView常用用法

    ListView是比较常用的控件,但一直都觉得创建ListView步骤有点繁琐,故在此总结一下,方便查阅. 程序效果是实现一个ListView,ListView里面有标题,内容和图片,并加入点击和长按 ...

  8. 【腾讯Bugly干货分享】Android ListView与RecyclerView对比浅析--缓存机制

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/5811d... 作者:黄宁源 一,背景 RecyclerView是谷歌官方出的一 ...

  9. Android ListView异步加载图片乱序问题,原因分析及解决方案

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/45586553 在Android所有系统自带的控件当中,ListView这个控件算是 ...

最新文章

  1. C++ 实现高精度的计算
  2. mysql 强制索引循序_mysql 强制走索引
  3. lvs主从服务器转发风暴(广播风暴、大流量)
  4. java foreach 跳过本次循环_【Java】对foreach循环的思考
  5. HDU 1159 Common Subsequence 动态规划
  6. Requirements Analysis with 'pseud-Formal' Method
  7. cookie与session
  8. 软件测试基础知识总结
  9. 后缀树后缀数组LCP
  10. 【分享】笔记本触控面板使用指南
  11. Aspnet Mvc 前后端分离项目手记(三)关于restful 风格Url设计
  12. ds18b20驱动程序Linux,基于linux下的ds18b20驱动程序的编写
  13. oracle12c创建监听,Oracle 12c为PDB创建专用监听
  14. OpenCV中使用Eigenfaces人脸识别器识别人脸实战(附Python源码)
  15. 【学习笔记】数字图像基础02
  16. Tokyo Dystopia 1000w数据测试
  17. 走在边缘地带上的百度,还是差了那么一点!
  18. 16篇论文入选AAAI 2021,京东数科AI都在关注什么?(附论文下载)
  19. 浏览器查看,请在微信客户端打开链接
  20. 7-3 JAVA-水仙花数 (20 分)

热门文章

  1. 在基于Jetty Fast CGI Proxy和php-fpm下配置Discuz
  2. OOo on ready---VB篇
  3. C# 2.0 套接字编程实例初探
  4. [Python]小甲鱼Python视频第048课(魔法方法:迭代器) )课后题及参考解答
  5. 使用SQL语句创建数据库2——创建多个数据库文件和多个日志文件
  6. VK Cup 2017 - Round 2
  7. Java System类
  8. Android 开源项目android-open-project工具库解析之(一) 依赖注入,图片缓存,网络相关,数据库orm工具包,Android公共库...
  9. Destroying the bus stations
  10. TabHost刷新activity的方法