RecyclerView可见项数量返回的是RecyclerView中所有项的总数。

4

我正在使用RecyclerView来显示项目列表。总共有10个项目,但每次只能看到3个。但是当我使用recyclerView.getChildCount()方法获取可见计数时,它会给我10而不是3。可能出了什么问题。我正在尝试实现分页。所以每次我的可见计数都与totalitemcount相同,结果我的load more一直被调用,直到所有页面都加载完毕。以下是我的代码。

 public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
    super.onScrolled(recyclerView, dx, dy);

    if (dy > 0) {
        onScrolled();
    }



    visibleItemCount = recyclerView.getChildCount();
    totalItemCount = mLinearLayoutManager.getItemCount();
    firstVisibleItem = mLinearLayoutManager.findFirstVisibleItemPosition();

    if (loading) {
        if (totalItemCount > previousTotal) {
            loading = false;
            previousTotal = totalItemCount;
        }
    }
    if (!loading
            && (totalItemCount - visibleItemCount) <= (firstVisibleItem + visibleThreshold)) {
        // End has been reached

        // Do something
        current_page++;

        onLoadMoreData(current_page);

        loading = true;
    }

}

因为RecyclerView只持有一些被显示或者“接近”被显示的项目,所以recyclerView.getChildCount()会返回较小且不固定的值。你可以使用以下代码来获取实际项目数量:int itemCount = layoutManager.findLastVisibleItemPosition() - layoutManager.findFirstVisibleItemPosition(); - Sayan Manna
2个回答

7

查看这个答案:如何获取RecyclerView中可见的项目


基于那个答案,您可以做类似于下面这样的操作:

LinearLayoutManager layoutManager = ((LinearLayoutManager)mRecyclerView.getLayoutManager());

int visibleItemCount = layoutManager.findLastVisibleItemPosition() - layoutManager.findFirstVisibleItemPosition();

希望这能帮到你。

修改了我的回答 - arun
我建议你跟随这个教程,它可能会有所帮助:链接你也可以尝试使用Paginate库:链接如果我是你,我会使用Google的Paging库,因为它易于使用且非常高效:链接 - Tomas Jablonskis
findLastVisibleItemPosition返回列表中的最后一个项目,而不是最后一个可见的视图。例如,recyclerview有23个条目,但只有5个是可见的。因此,findLastVisibleItemPosition返回的是23,而不是5。 - Ashish Garg
方法 findLastVisibleItemPosition() 永远不会返回 0。 - Lucas Sabino

0
To get the number of items visible on the screen of the recycler view.

rvBreakingNews.addOnScrollListener(object : RecyclerView.OnScrollListener() {
            override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
                super.onScrolled(recyclerView, dx, dy)

                val mLayoutManger = recyclerView.layoutManager as LinearLayoutManager
                //To get the total Number of items visible on the screen
                val visibleItemCount = mLayoutManger.childCount 
              //To get the total items loaded in the RecyclerView
                val totalItemCount = mLayoutManger.itemCount 

        })

visibleItemCount和totalItemCount始终返回RecyclerView中项目的总数。 - Lucas Sabino

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接