我正在检查滚动是否位于 recyclerview 的底部。 很多文章向我推荐了 RecyclerView.canScrollVertically(1) 方法。 但就我而言,该方法总是返回 false。
binding.studentsList.addOnScrollListener(object : RecyclerView.OnScrollListener(){
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
super.onScrollStateChanged(recyclerView, newState)
Log.d("SCROLL", "canscrollDown ${recyclerView.canScrollVertically(1)} State = $newState")
if (!recyclerView.canScrollVertically(1) && newState == RecyclerView.SCROLL_STATE_DRAGGING){
//do something
}
}
})
是否有其他方法来检查滚动是否到达底部?
检查 RecyclerView 底部的另一种方法是使用
RecyclerView.OnScrollListener
的 findLastCompletelyVisibleItemPosition
和 LayoutManager
。
class LoadMoreScrollListener()
: RecyclerView.OnScrollListener(){
var onLoadMore: (() -> Unit)? = null
var dataSize : Int = 0
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
super.onScrolled(recyclerView, dx, dy)
if (dy == 0) return
var layoutManager = recyclerView.layoutManager as LinearLayoutManager?
if (layoutManager != null && layoutManager.findLastCompletelyVisibleItemPosition() == dataSize - 1) {
onLoadMore?.invoke()
}
}
}
private val loadMoreScrollListener : LoadMoreScrollListener = LoadMoreScrollListener()
recyclerView.addOnScrollListener(loadMoreScrollListener)
loadMoreScrollListener.onLoadMore = {
// get more data
loadMoreScrollListener.dataSize = [newSize]
}
希望有帮助!