需求:列表滚动后,判断是否滚动到底部,展示加载更多的Loading文案和动画
Kotlin
binding.watchMoreRv.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
super.onScrolled(recyclerView, dx, dy)
//获取layoutManager
val layoutManager = recyclerView.layoutManager as LinearLayoutManager
//获取item个数
val totalItemCount = layoutManager.itemCount
//最后一个可见item的位置
val lastVisibleItemPosition = layoutManager.findLastVisibleItemPosition()
//当前并不在请求,不是最后一个页面
if (!isLoading && !isLastPage && lastVisibleItemPosition == totalItemCount - 1
&& recyclerView.scrollState == RecyclerView.SCROLL_STATE_IDLE
) {
runOnUiThread {
curMorePage++
isLoading = true
homeMoreAdapter?.setLoading(true)
}
Handler(Looper.getMainLooper()).postDelayed({
loadMoreData()
}, 2000)
}
}
})
tips:recyclerView.scrollState == RecyclerView.SCROLL_STATE_IDLE 这个判断条件很重要哦。
- SCROLL_STATE_IDLE:值为0,RecyclerView 当前处于 空闲状态,没有滚动操作正在进行。这是默认状态,当滚动停止时会切换到该状态。
- RecyclerView.SCROLL_STATE_DRAGGING:值为1,RecyclerView 当前正在被用户拖动。用户用手指滑动屏幕时进入该状态。
- RecyclerView.SCROLL_STATE_SETTLING:值为2,RecyclerView 当前正在 惯性滚动。用户手指松开后,列表仍在由于惯性继续滑动时的状态。