需求:列表滚动后,判断是否滚动到底部,展示加载更多的Loading文案和动画
binding.watchMoreRv.addOnScrollListener(object : RecyclerView.OnScrollListener() {override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {super.onScrolled(recyclerView, dx, dy)//获取layoutManagerval 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 = truehomeMoreAdapter?.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 当前正在 惯性滚动。用户手指松开后,列表仍在由于惯性继续滑动时的状态。