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的使用就讲完了。


就这么简单。

原创粉丝点击