当前位置: 首页 > 知识库问答 >
问题:

如何知道recycler view/LinearLayoutManager是滚动到顶部还是底部?

公西运良
2023-03-14

目前我正在使用以下代码来检查是否应启用SwipeRe的布局。

private void laySwipeToggle() {
    if (mRecyclerView.getChildCount() == 0 || mRecyclerView.getChildAt(0).getTop() == 0) {
        mLaySwipe.setEnabled(true);
    } else {
        mLaySwipe.setEnabled(false);
    }
}

但问题就在这里。当它滚动到另一个项目视图的边界时< code > mrecyclerview . get child at(0)。getTop()也返回0。

有没有像RecyclerView.isScrolledToBottom()或RecyclerView.isScrolledToTop()这样的东西?

编辑:(mRecyclerView.getChildAT(0). getTop()==0


共有3个答案

戚高洁
2023-03-14

为了检查回收器视图是否滚动到底部。使用以下代码。

/**
     * Check whether the last item in RecyclerView is being displayed or not
     *
     * @param recyclerView which you would like to check
     * @return true if last position was Visible and false Otherwise
     */
    private boolean isLastItemDisplaying(RecyclerView recyclerView) {
        if (recyclerView.getAdapter().getItemCount() != 0) {
            int lastVisibleItemPosition = ((LinearLayoutManager) recyclerView.getLayoutManager()).findLastCompletelyVisibleItemPosition();
            if (lastVisibleItemPosition != RecyclerView.NO_POSITION && lastVisibleItemPosition == recyclerView.getAdapter().getItemCount() - 1)
                return true;
        }
        return false;
    }

一些其他信息

如果您想在点击Edittext时在RecyclerView中实现ScrollToBottom,那么我建议您添加1秒的延迟,如下所示:

 edittext.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_UP)
                    if (isLastItemDisplaying(recyclerView)) {
// The scrolling can happen instantly before keyboard even opens up so to handle that we add 1 second delay to scrolling
                        recyclerView.postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                recyclerView.smoothScrollToPosition(recyclerView.getAdapter().getItemCount() - 1);

                            }
                        }, 1000);
                    }
                return false;
            }
        });
上官景铄
2023-03-14

你可以尝试recyclerView.canScrollVertically(int direction),如果你只需要知道是否可以滚动。

方向整数:

    < li>-1表示向上 < li>1表示向下 < li>0将始终返回false。
岳华灿
2023-03-14

解决方案在布局管理器中。

LinearLayoutManager layoutManager = new LinearLayoutManager(this);

// Add this to your Recycler view
recyclerView.setLayoutManager(layoutManager);

// To check if at the top of recycler view
if(layoutManager.firstCompletelyVisibleItemPosition()==0){
    // Its at top
}

// To check if at the bottom of recycler view
if(layoutManager.lastCompletelyVisibleItemPosition()==data.size()-1){
    // Its at bottom
}

编辑

如果您的项目大小大于屏幕,请使用以下命令来检测顶部事件。

RecyclerView recyclerView = (RecyclerView) view;
LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();

int pos = linearLayoutManager.findFirstVisibleItemPosition();

if(linearLayoutManager.findViewByPosition(pos).getTop()==0 && pos==0){
    return true;
}

PS:实际上,如果您将RecyclerView直接放在SwipeRefreshview中,则无需执行此操作

 类似资料:
  • 问题内容: 这是我的onCreate,它处理适配器,LinearLayoutManager等。我尝试了每个选项以尝试将其滚动到顶部,但不能。我什至尝试创建自己的自定义LinearLayoutManager。 问题答案: 您尝试过还是? RecyclerView不会在其中实现任何滚动逻辑,而是更加具体,它会根据实现的布局转到特定的索引,在您的情况下是线性的。

  • 本文向大家介绍jquery滚动到顶部底部代码,包括了jquery滚动到顶部底部代码的使用技巧和注意事项,需要的朋友参考一下 HTML JS代码 以上所述就是本文的全部代码了,希望大家能够喜欢。

  • 问题内容: 目前,我正在使用带有LinearLayout Manager的RecyclerView和作为HeaderView的EditText来过滤列表的内容。 如果RecyclerView的内容小于RecyclerView本身,我想隐藏EditText。 如果其内容可以滚动,是否可以“询问” Recyclerview或LayoutManager? 谢谢你们。 问题答案: 当最后位置的项目完全可见

  • 问题内容: 我想知道是否有办法知道什么时候(在我的情况下为垂直)何时到达其容纳物的底部。 起初,我虽然在滚动条上使用,但是我不知道如何解释的属性。另外,我不确定是否正确理解了代表什么以及是否可以使用该值来获取所需的信息。 编辑 : 问题答案: 您必须将滚动条的范围添加到您的计算中。我在下面的示例中将代码添加到您的代码中。 两种替代实现(部分对Kleopatra做出反应) 或通过模型

  • 问题内容: 加载活动后,我想滚动到RecyclerView列表的底部。 引发关于RecyclerView中不受支持的异常,并且似乎没有任何作用。 在上面的代码块之后,我添加了 这不起作用。中有30个元素。 问题答案: 只需进行设置,以使LLM可以从头开始布局项目。 两者之间的区别在于,将视图设置为显示最后一个元素,布局方向将保持不变。(因此,在从左到右的水平Recycler视图中,将显示最后一个元

  • 我正在做一个西班牙新闻应用程序,看这里: 这个应用程序的问题是,每当任何用户点击like、play audio或translate按钮时,recyclerView就会跳到顶部。 > 数据以片段形式从Firebase实时数据库中获取。请帮帮忙。 @override public View onCreateView(LayoutInfluater Influater,ViewGroup contain