【问题标题】:Scroll past end of list滚动到列表末尾
【发布时间】:2015-06-29 08:05:21
【问题描述】:

我目前有一个RecyclerView,它允许用户滚动浏览一个长列表。但是,当视图到达数据集中的最后一项时,视图会停止向右滚动。

问题:如何允许用户进一步滚动,以便RecyvlerView 中的最后一项能够在屏幕上进一步向上滚动?

【问题讨论】:

  • 你找到解决办法了吗?

标签: android listview scroll android-recyclerview


【解决方案1】:

在您的 recyclerViewAdapter 的 onBindViewHolder 上,捕获与 position 上的条件匹配的最后一个项目 list.size() - 1 然后以编程方式设置底部边距,因此:


@Override
public void onBindViewHolder(@NonNull NewsItemViewHolder holder, int position) {
    if(position == getCurrentList().size() - 1){
        RecyclerView.LayoutParams layoutParams = 
                 (RecyclerView.LayoutParams) itemHolderRootView.getLayoutParams();
        layoutParams.setMargins(layoutParams.leftMargin,layoutParams.topMargin,layoutParams.rightMargin, 300);
    }
}

您可能希望将300 底部边距与您的屏幕密度相乘

DisplayMetrics metrics = getResources().getDisplayMetrics();
int bottomMargin = 300 * metrics.densityDpi;

因为它会因屏幕而异。

【讨论】:

    【解决方案2】:

    这称为“过度滚动”。这种行为是在 Gingerbread 中引入的。

    要打开它,请使用

    public void setOverScrollMode(int mode);
    

    来自Android docs

    public void setOverScrollMode(整数模式)

    在 API 级别 9 中添加 设置此视图的过度滚动模式。有效的 过度滚动模式为 OVER_SCROLL_ALWAYS(默认), OVER_SCROLL_IF_CONTENT_SCROLLS(仅当视图 内容大于容器),或 OVER_SCROLL_NEVER。环境 视图的过度滚动模式只有在视图是 可以滚动。

    参数模式 此视图的新过度滚动模式。

    你可以阅读更多关于这个here的信息。

    【讨论】:

    • 嗯,我尝试将它添加到我的 recyclerView 但它没有任何影响。有没有办法确定过度滚动的数量?感谢您的回复!
    • @MatthewSteinhardt 你放了什么模式?
    • 对我不起作用。无论何种模式(总是、从不、ifContentScrolls),我仍然无法滚动过去我的最后一个回收站视图项目
    • 这不是真的 - 过度滚动是您在尝试滚动到列表末尾时获得的半透明半圆形效果。此设置可以打开/关闭该效果,但不允许滚动到列表末尾。
    猜你喜欢
    • 1970-01-01
    • 2011-04-06
    • 2013-07-30
    • 2023-01-30
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多