当前位置:  开发笔记 > 编程语言 > 正文

如何检测用户何时滚动到RecyclerView中的最顶层项目

如何解决《如何检测用户何时滚动到RecyclerView中的最顶层项目》经验,为你挑选了2个好方法。

我尝试编写以下代码

@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
  super.onScrolled(recyclerView, dx, dy);
  if(dy > 0){
    //scrolling up
  } else {
    //scrolling down
    int pastVisibleItems = linearLayoutManager.findFirstVisibleItemPosition();
    if (pastVisibleItems  == 0) {
      Toast.makeText(getContext(),"Top most item",Toast.LENGTH_SHORT).show();
    }
  }
}

但它不起作用.我也尝试使用android的SwipeRefreshLayout来做这个,因为它做了我想要的,它能够检测用户何时滚动到最顶层的项目.我决定不使用它,因为我似乎无法阻止加载指示器弹出(我不想看到加载指示器出来).

所以,基本上我想做的是:

    检查用户滚动

    它已经是最顶级的项目了吗?

    如果是的话,执行一些事情,如果没有则执行任务

知道怎么做到这一点?

谢谢.



1> Jay Patel..:

将您的代码替换为以下代码:

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

  int pastVisibleItems = linearLayoutManager.findFirstCompletelyVisibleItemPosition();
  if (pastVisibleItems  == 0) {
    Toast.makeText(getContext(),"Top most item",Toast.LENGTH_SHORT).show();                
  }
}

它对我有用,如果您遇到任何错误,请发表评论。



2> the newbie c..:

我自己解决了我的问题.我使用下面的代码

private boolean isUserScrolling = false;
private boolean isListGoingUp = true;

然后在RecyclerView OnScrollListener中

@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
    super.onScrollStateChanged(recyclerView, newState);
    //detect is the topmost item visible and is user scrolling? if true then only execute
    if(newState ==  RecyclerView.SCROLL_STATE_DRAGGING){
        isUserScrolling = true;
        if(isListGoingUp){
            //my recycler view is actually inverted so I have to write this condition instead
            if(linearLayoutManager.findLastCompletelyVisibleItemPosition() + 1 == list.size()){
                Handler handler = new Handler();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        if(isListGoingUp) {
                            if (linearLayoutManager.findLastCompletelyVisibleItemPosition() + 1 == list.size()) {
                                Toast.makeText(getContext(),"exeute something", Toast.LENGTH_SHORT).show();
                            }
                        }
                    }
                },50);
                //waiting for 50ms because when scrolling down from top, the variable isListGoingUp is still true until the onScrolled method is executed
            }
        }
    }
}

@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
    super.onScrolled(recyclerView, dx, dy);
    if(isUserScrolling){
        if(dy > 0){
            //means user finger is moving up but the list is going down
            isListGoingUp = false;
        }
        else{
            //means user finger is moving down but the list is going up
            isListGoingUp = true;
        }
    }
}

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有