嵌套Scrollview滚动中的Recyclerview滚动,但不能像普通Recyclerview或Nested Scrollview一样快速滚动


96

我正在使用RecyclerView内部NestedScrollView,并且有效。但是当我RecyclerView在内部LinearLayout或其他物体上使用时,它会根据手势以各种速度滚动。滚动倾听手势,如果我仅向上滑动一点,则滚动一点;而如果我非常快速地滑动,则滚动非常快。现在我的问题是RecyclerView内部NestedScrollView肯定滚动但快速滚动不起作用。但是,我快或慢滑动,RecyclerViewNestedScrollView只滚动一点。

如何使我NestedScrollViewRecyclerView该滚动视图内部以各种速度滚动?


3
recyclerView.setNestedScrollingEnabled(false); 这真的有效!
Aung Si Min Htet

stackoverflow.com/questions/27083091/…解决方案可在此处找到。
maruti060385

Answers:


266

尝试

recyclerView.setNestedScrollingEnabled(false);

14
但是通过此设置,recyclerview不会回收视图!您对此有何想法?
2016年

实际上,我在布局内添加了两个或多个回收者视图,其中包含不同的布局管理器(例如线性布局和网格布局),其中还包括横幅和其他视图。因此,要像这样处理回收站视图,请将所有这些都放入“嵌套滚动视图”修复程序中。
Aung Si Min Htet

24
我不知道这个答案怎么这么多。如果禁用嵌套滚动,则将无法达到目的。如果我想使用嵌套卷轴和回收站怎么办?像CoordinatorLayout,AppBarLayout和RecyclerView之类的东西?
Jimit Patel

感谢@JimitPatel,这正是我目前的问题。我在nestedscroll视图中有一个recycleview,但无法滚动。stackoverflow.com/questions/41259756/…–
Karoly

1
@Karoly需要自定义嵌套的滚动条……我已经做到了……将在几个小时后发布……目前,我正在旅行。我在工具栏后的回收器视图中遇到了视差效果问题。
Jimit Patel'1


22

我在android 16上工作,无法使用setNestedSCrollEnabled方法,

我最终要做的是阻止RecyclerView处理Scroll。

像在LinerLayoutManager中一样,我将canScrollHorizo​​ntally和canScrollVertically设为默认返回false。

myRecyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false){
            @Override
            public boolean canScrollHorizontally() {
                return false;
            }

            @Override
            public boolean canScrollVertically() {
                return false;
            }
        });

这实际上为我工作。我在ScrollView的LinearLinear内部有一个RecyclerView。
FonzTech's

9

经过几次迭代,我想出了一个解决方案。

  1. 如果您使用的是RecyclerView,则:

    recyclerView.setNestedScrollingEnabled(false);
  2. 如果您在NestedScrollingView中使用LinearLayout,请在正常ScrollView中使用LinearLayout,然后将其滚动设置为

    scrollView.setNestedScrollingEnabled(false);

2

android:overScrollMode =“ never

  <android.support.v4.widget.NestedScrollView
    android:id="@+id/nestedScrollView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:overScrollMode="never">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </LinearLayout>
 </android.support.v4.widget.NestedScrollView>

1

可以将ScrollView与ExtendRecyclerView类一起使用,该类重写onMeasure方法。这对我行得通!

@Override
protected void onMeasure(int widthSpec, int heightSpec) {
    int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
    super.onMeasure(widthSpec, expandSpec);
}

1
recyclerView.setNestedScrollingEnabled(false);

有时会很有用。但并非始终如此,因为它会禁用recylcer视图中的视图回收功能。

备择方案:

尝试使用Recycler视图的CollapsiveToolbarLayout。将其他视图放入collapsiveTollbar布局中。


0

我也遇到了这个问题。并升级以26.1.0修复它。


-1

在“我的情况”下,我将所有图像放置在可绘制文件夹中,并插入了可绘制xxxhdpi文件夹,这就是屏幕界面滞后的原因。


-3

您应该在任何布局(如LinearLayout)中包装回收站视图,并将RecyclerView大小设置为常量,如800dp。这将启用平滑滚动,并且回收站视图在滚动期间仍将回收站视图。

<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
                                xmlns:app="http://schemas.android.com/apk/res-auto"
                                android:layout_width="match_parent"
                                android:layout_height="match_parent"
                                android:orientation="vertical">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="800dp"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</LinearLayout>


1
这是一个很好的答案,因为它指出了解决滚动问题的方法,而又不会破坏RecyclerView的主要优点,即仅加载可见视图并在滚动到看不见时回收它们。人们可能会否决它,因为像800dp这样的固定值无法在所有屏幕尺寸和方向上都起作用,但是可以通过编程方式计算并设置layout_height值-有点混乱,但它可以解决这两个问题。
jk7

-3

这是WAI。NestedScrollView使用规格“未指定”来度量其子级。这个孩子也可以成长。

这实质上等于NSV和RV的高度。因此,就RV而言,它认为它已完全显示。

用LL包裹您的RV,并给RV一个高度。LL不会将测量规范设置为过大,因此RV将在您提供的任何DP的设置高度内正确滚动。

此方法的唯一缺点是您将无法在RV上进行匹配父项。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.