Android RecyclerView 可以垂直滚动问题

问题描述 投票:0回答:1

我正在检查滚动是否位于 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
                }
            }
        })

是否有其他方法来检查滚动是否到达底部?

android android-recyclerview scroll
1个回答
0
投票

检查 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]
}

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.