一个Kotlin扩展函数来实现,可以用于RecyclerView的线性布局和瀑布流查找可见性的第一个和最后一个。
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView.LayoutManager
import androidx.recyclerview.widget.StaggeredGridLayoutManager
import kotlin.math.max
import kotlin.math.min
fun LayoutManager.findVisiblePosition(): Pair<Int, Int> {
return when (this) {
is LinearLayoutManager -> {
findVisiblePositionRange()
}
is StaggeredGridLayoutManager -> {
findVisiblePositionRange()
}
else -> {
throw IllegalArgumentException("非法参数")
}
}
}
/**
* 线性布局管理器获取可见的第一个和可见的最后一个
*/
fun LinearLayoutManager.findVisiblePositionRange(): Pair<Int, Int> {
val first = findFirstVisibleItemPosition()
val last = findLastVisibleItemPosition()
return Pair(first, last)
}
/**
* 瀑布流获取可见的第一个和可见的最后一个
*/
fun StaggeredGridLayoutManager.findVisiblePositionRange(): Pair<Int, Int> {
val firstVisibleItemPosition = findFirstVisibleItemPositions(null)
val lastVisibleItemPosition = findLastVisibleItemPositions(null)
val first = min(firstVisibleItemPosition[0], firstVisibleItemPosition[1])
val last = max(lastVisibleItemPosition[0], lastVisibleItemPosition[1])
return Pair(first, last)
}