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 DecorView的使用
- 下一篇: android 获取ListView内部