1. 程式人生 > >ScrollView+RecyclerView 判斷item是否顯示在螢幕內

ScrollView+RecyclerView 判斷item是否顯示在螢幕內

今天專案有個需求:列表滑動停止後,那幾個item顯示給了使用者,這幾個item就呼叫某個方法,沒有顯示給使用者的不能呼叫。

1.首先第一個問題就是滑動監聽

先嚐試給RcyclerView新增滑動監聽,結果無任何反應,這是因為滑動監聽被外面的ScrollView攔截了,所以就給ScrollView添加了監聽方法,監聽其滑動停止,具體的方法呢網上有很多,我是借鑑的下面這個文章:

然後在handleStop()內實現需求。

2.第二個問題就是獲取顯示給使用者的item範圍了

本身RecyclerView是有獲取顯示範圍的:

獲取首個完全顯示給使用者的item位置:findFirstCompletelyVisibleItemPosition();

獲取最後一個完全顯示給使用者的item位置:findLastCompletelyVisibleItemPosition();

但是實際放在專案中發現是沒作用的,就是比如請求第一頁資料10條,這兩個值返回的是0,9,這完全是整頁資料,沒達到目的。

然後我換個思路想了想,是否可以此時通過判斷某個控制元件是否顯示在螢幕當中來作為標準呢?說不如做,在網上查到相關方法

在上面RrcyclerView給的範圍內進行迴圈遍歷,對每個item進行是否顯示在螢幕內的判斷,如果是就呼叫某個方法,如果不是就不呼叫,結果還是挺理想的,有一個小小的問題就是一個item只顯示一部分也會為true,不過這基本可以滿足需求了。

不過感覺這樣寫很麻煩,可能也會有一些弊端,這還是要不斷的測試和完善。