【问题标题】:recyclerview add scrollListenerrecyclerview 添加滚动监听器
【发布时间】:2019-04-03 12:40:57
【问题描述】:

我有一个RecyclerView 和水平LinearLayoutManager。 我想查看ScrollListener。 我的目标是检查这些步骤:

  1. 检查RecyclerView何时开始滚动
  2. 检查RecyclerView何时结束滚动
  3. 检查RecyclerView 的滚动条何时处于中心位置

这是我的RecyclerView 代码和LinearLayoutManager

LinearLayoutManager horizontalManager = new LinearLayoutManager(context);
        horizontalManager.setOrientation(LinearLayoutManager.HORIZONTAL);
        viewHolderStory.recyclerView.setLayoutManager(horizontalManager);
        viewHolderStory.recyclerView.addItemDecoration(new PaddingItemDecoration((Activity) context));
        viewHolderStory.recyclerView.setHasFixedSize(true);
        viewHolderStory.recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);

            }
        });
        viewHolderStory.recyclerView.setNestedScrollingEnabled(false);

有什么方法可以在我的 addOnScrollListener 方法上添加验证吗?

【问题讨论】:

    标签: android android-recyclerview


    【解决方案1】:
     public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                    super.onScrollStateChanged(recyclerView, newState);
                    if(newState==RecyclerView.SCROLL_STATE_IDLE){
                        /// User Stops Scroll
                     }
                    if(newState==RecyclerView.SCROLL_STATE_DRAGGING){
                     /// User Starts Scroll
                  }
                }
    

    您可以从this 找到更多信息。

    【讨论】:

      【解决方案2】:

      您可以使用 computeVerticalScrollExtent()computeVerticalScrollOffset()computeVerticalScrollRange() 进行计算

      如果您的回收器视图是水平的,则这些函数有一个水平对应项

      完整代码:

      viewHolderStory.recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() 
      {
          @Override
          public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
              int extent = recyclerView.computeVerticalScrollExtent();
              int offset = recyclerView.computeVerticalScrollOffset();
              int range = recyclerView.computeVerticalScrollRange();
      
              if(offset == 0){
                  //fire when recycler view hit top
                  Log.i("myTag", "onScrolled: top");
              }
              else if(offset + extent == range){
                  //fire when recycler view hit bottom
                  Log.i("myTag", "onScrolled: bottom");
              }
              else {
                  //fire the rest of the time
                  Log.i("myTag", "onScrolled: middle");
              }
          }
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-15
        • 2016-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-17
        相关资源
        最近更新 更多