【问题标题】:How do I detect when it comes to the end in recyclerview?如何在 recyclerview 中检测到何时结束?
【发布时间】:2019-12-13 14:47:42
【问题描述】:

我正在使用 json 将我的数据归档到 recyclerview。 我想要 recyclerview 中每 10 个项目中的新数据。

所以 10 个数据 -> 最后在 recyclerview 中到达了 10 个数据 ....

那么如何检测到用户处于recyclerview的末尾? 或者,如果有其他解决方案,您可以提交您的想法。我现在使用它,但有时它不起作用......

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {

                super.onScrollStateChanged(recyclerView, newState);
               // MyLog.log("rcv1 " + newState);


            }

            @Override
            public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                MyLog.log("rcv1 dy: "+ dy);
                if (dy>=0 ){
                    llHeading.setVisibility(View.GONE);

                }else {
                    llHeading.setVisibility(View.VISIBLE);

                }
                totalItemCount = layoutManager.getItemCount();
                visibleItemCount = layoutManager.getChildCount();
                pastVisiblesItems = layoutManager.findFirstVisibleItemPosition();
                if (!loadingItems && (visibleItemCount + pastVisiblesItems) >= totalItemCount ) {
                    loadingItems = true;
                    MyLog.log("rcv1 came to an end.");

                    getDataClient("",rccount*10,ranking_sort_by,ranking_desc,1);


                }

            }


        });

【问题讨论】:

标签: java android android-recyclerview


【解决方案1】:

在您的适配器中,您可以使用onBindViewHolder 然后检查位置。

public void onBindViewHolder(ViewHolder holder, int position) {
    if (position == getItemCount() - 1) {
        // You are at the end of list
    }
}

【讨论】:

  • 我正要提出同样的建议。我认为这是执行此操作的默认方法:创建最后一个项目后立即加载更多项目。它简单明了,您不需要处理滚动侦听器
  • 谢谢兄弟 :) 我解决了问题。我在质疑为什么我现在不使用 onbindviewholder。我没想到:D
【解决方案2】:

使用这个:

  recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);

            if (!recyclerView.canScrollVertically(1) && newState==RecyclerView.SCROLL_STATE_IDLE) {
                Log.d("tag","scrolled to end");

            }
        }
    });

【讨论】:

    猜你喜欢
    • 2011-01-06
    • 2016-08-04
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    • 2011-02-14
    相关资源
    最近更新 更多