首页 > 解决方案 > recyclerview 添加滚动监听器

问题描述

我有一个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 方法上添加验证?

标签: androidandroid-recyclerview

解决方案


您可以使用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");
        }
    }
});

推荐阅读