滚动列表末尾

时间:2015-06-29 08:05:22

标签: android listview scroll android-recyclerview

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

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

2 个答案:

答案 0 :(得分:2)

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

要启用它,请使用

public void setOverScrollMode(int mode);

来自Android docs

  

public void setOverScrollMode(int mode)

     

在API级别9中添加为此视图设置过度滚动模式。有效   过滚动模式是OVER_SCROLL_ALWAYS(默认),   OVER_SCROLL_IF_CONTENT_SCROLLS(仅在视图时允许过度滚动   content大于容器)或OVER_SCROLL_NEVER。设置   视图的过滚动模式仅在视图有效时才会生效   能够滚动。

     

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

您可以阅读有关此here的更多信息。

答案 1 :(得分:0)

在您的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;

因为它在各个屏幕上都不同。