【问题标题】:How to detect when RecyclerView is scrolled to most top position如何检测 RecyclerView 何时滚动到最高位置
【发布时间】:2017-01-17 06:30:59
【问题描述】:

我有上面的 RecyclerView,我有一个高度大于 255 像素的 AppBarLayout。当用户滚动 RecyclerView 时,AppBarLayout 出现问题。为避免这种情况,我决定手动扩展 AppBarLayout。我的 RecyclerView 由 GridLayoutManager 组成,跨度为 3。我使用下面的代码来监听 RecyclerView 的顶端

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
        super.onScrollStateChanged(recyclerView, newState);
        if (newState == RecyclerView.SCROLL_STATE_IDLE) {
            int firstVisiblePosition = ((LinearLayoutManager)recyclerView.getLayoutManager()).findFirstCompletelyVisibleItemPosition();
            if (firstVisiblePosition == 0) {
                appBarLayout.setExpanded(true, true);
            }
        }
    }
});

【问题讨论】:

    标签: android android-recyclerview android-appbarlayout gridlayoutmanager


    【解决方案1】:
        recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
    
                int firstVisibleItem = gridLayoutManager.findFirstCompletelyVisibleItemPosition();
    
                if(firstVisibleItem == 0){
                    // your code
                }
            }
        });
    

    【讨论】:

    • 我想在向上滚动时达到顶峰
    • 不,我在 recyclerview 上方有一个应用栏,向下滚动应用栏时手动展开,向上滚动应用栏时手动折叠
    • 把你的代码放在 onScrolled() 而不是 onScrollStateChanged()
    • @HafizMuneeb 我的列表大小大于屏幕大小,在此演员阵容中,该方法总是被调用,在这种情况下如何检测 recyclerview 滚动到最顶部的项目?
    【解决方案2】:

    这个答案会对你有所帮助。真心的

    recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
    
                super.onScrollStateChanged(recyclerView, newState);
            }
    
            @Override
            public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
    
                totalItemCount = layoutManager.getItemCount();
                visibleItemCount = layoutManager.getChildCount();
                pastVisiblesItems = layoutManager.findFirstVisibleItemPosition();
                if ((visibleItemCount + pastVisiblesItems) >= totalItemCount ) {
    
                    Log.d(TAG, "scroll down");
    
    
    
                }
                else{
                    Log.d(TAG, "scroll up");
                }
            }
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多