日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

android listView的setOnScrollListener的使用

發(fā)布時(shí)間:2024/4/15 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android listView的setOnScrollListener的使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

今天,簡(jiǎn)單講講如何使用 

listView的setOnScrollListener。


ListView是Android中最常用的控件之一,隨著時(shí)代發(fā)展,RecyclerView有取代它的趨勢(shì),但是在一些老代碼中,ListView依然扮演著重要的作用。
項(xiàng)目中遇到一個(gè)需求,需要監(jiān)聽(tīng)ListView在滑動(dòng)時(shí)滑動(dòng)的Y軸坐標(biāo)。這個(gè)需求在RecyclerView中computeVerticalScrollOffset方法完成了這項(xiàng)功能。只需要在OnScrollListener的onScrolled方法中,調(diào)用computeVerticalScrollOffset即可在滑動(dòng)時(shí)獲得Y坐標(biāo)。
然而,在ListView中,這個(gè)實(shí)現(xiàn)卻沒(méi)有這么方便。
在ListView中,setOnScrollListener(new AbsListView.OnScrollListener(),可以獲得以下兩個(gè)方法:
1)public void onScrollStateChanged(AbsListView view, int scrollState)
2)public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)

方法1 監(jiān)聽(tīng)著ListView的滑動(dòng)狀態(tài)改變。官方的有三種狀態(tài)SCROLL_STATE_TOUCH_SCROLL、SCROLL_STATE_FLING、SCROLL_STATE_IDLE:

SCROLL_STATE_TOUCH_SCROLL:手指正拖著ListView滑動(dòng)

SCROLL_STATE_FLING:ListView正自由滑動(dòng)

SCROLL_STATE_IDLE:ListView滑動(dòng)后靜止

方法2 監(jiān)聽(tīng)滑動(dòng):

firstVisibleItem:第一個(gè)可見(jiàn)項(xiàng)是ListView的第幾項(xiàng)

visibleItemCount:可見(jiàn)項(xiàng)的總數(shù)

totalItemCount:總項(xiàng)數(shù)


下面舉一個(gè)例子:

listView.setOnScrollListener(new OnScrollListener() {@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {}@Overridepublic void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {/**firstVisibleItem表示在現(xiàn)時(shí)屏幕第一個(gè)ListItem(部分顯示的ListItem也算)在整個(gè)ListView的位置(下標(biāo)從0開(kāi)始)**/Log.i("firstVisibleItem", String.valueOf(firstVisibleItem));/**visibleItemCount表示在現(xiàn)時(shí)屏幕可以見(jiàn)到的ListItem(部分顯示的ListItem也算)總數(shù)**/Log.i("visibleItemCount", String.valueOf(visibleItemCount));/**totalItemCount表示ListView的ListItem總數(shù)**/Log.i("totalItemCount", String.valueOf(totalItemCount));/**listView.getFirstVisiblePosition()表示在現(xiàn)時(shí)屏幕第一個(gè)ListItem(第一個(gè)ListItem部分顯示也算)在整個(gè)ListView的位置(下標(biāo)從0開(kāi)始)**/Log.i("firstPosition", String.valueOf(listView.getFirstVisiblePosition()));/**listView.getLastVisiblePosition()表示在現(xiàn)時(shí)屏幕最后一個(gè)ListItem(最后ListItem要完全顯示出來(lái)才算)在整個(gè)ListView的位置(下標(biāo)從0開(kāi)始)**/Log.i("lasPosition", String.valueOf(listView.getLastVisiblePosition()));} });



其中,onScrollStateChanged函數(shù)在listview狀態(tài)改變時(shí)會(huì)調(diào)用,我們可以通過(guò)這個(gè)做一下操作。比如當(dāng)listview狀態(tài)為SCROLL_STATE_IDLE(停止滑動(dòng)的狀態(tài))時(shí),獲取當(dāng)前可見(jiàn)的itemView。

另一個(gè)onScroll函數(shù)會(huì)不停的調(diào)用,可以獲取當(dāng)前第一個(gè)可見(jiàn)的view的位置和總的可見(jiàn)的itemView的數(shù)目。


這里講講如何獲取第一個(gè)itemView:

首先說(shuō),listview有個(gè)getChildAt(int position)的方法,但是這個(gè)方法只計(jì)算可視的item,也就是說(shuō)position只是從第一個(gè)可以看到的item算起的,這樣就和實(shí)際獲取的position是不一樣的。

直接說(shuō)解決方法吧:

listview.getChildAt(position-listview.getFirstVisiblePosition());

listview.getFirstVisiblePosition()獲取的是第一個(gè)可視item在整個(gè)listview中的position,這樣經(jīng)過(guò)簡(jiǎn)單的計(jì)算就可以獲取到我們需要的item的view對(duì)象了。


android listView的setOnScrollListener的使用就講完了。


就這么簡(jiǎn)單。

總結(jié)

以上是生活随笔為你收集整理的android listView的setOnScrollListener的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。