NestedScrollview中的RecyclerView无法平滑滚动

时间:2018-12-27 18:21:51

标签: android android-recyclerview android-nestedscrollview endlessscroll

当我向下滚动时,除非我从上面的布局开始触摸,否则RecyclerView上方的项目不会滚动,并且只有在到达RecyclerView的末尾时才向下滚动。

<NestedScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <LinearLayout>
        <Some other items.../>
    </LinearLayout>

    <RecyclerView
         android:layout_width="match_parent"
         android:layout_height="wrap_content"/>
</NestedScrollView>

注意: 实际上,我为RecyclerView使用了固定大小,并通过以下代码对其进行了设置:

float height_recyclerview = (ScreenUtil.getHeight(context) - (height_banner + height_bottom_navigation + height_create_post));
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, (int) height_recyclerview);
rv.setLayoutParams(layoutParams);

为什么,如果固定尺寸与wrap_content配合使用,我可以使用固定尺寸吗?

  • 我将显示可能包含数千个项目 图像,如果不这样做会损害性能 由于RecyclerView位于 NestedScrollView
  • 我实现了一个EndlessRecyclerViewScrollListener,它具有一个 问题是,如果持续从服务器不断加载更多数据, 在任何可滚动范围内的RecyclerView上实现 视图,或者它处于可滚动视图中,但没有固定的视图 高度,即使您没有向下滚动。

我尝试了以下操作:

  • 在回收者视图中将嵌套滚动设置为false
  • 尝试使用滚动视图而不是嵌套滚动视图
  • 其他与布局和滚动行为相关的其他代码,其他代码对我不起作用,因为我正在以更复杂的布局实现它,并且我使用EndlessRecyclerViewScrollListener这个事实

什么我要修复?

我想使页面像单个页面一样滚动,而不是作为单独的可滚动视图。

请注意,我的回收站视图具有固定的高度,占据了整个屏幕的空间,这意味着它的高度实际上是合适的,假设如果用户向下滚动,则上面的线性布局也不再可见。

理想的方案是首先使滚动视图向下滚动,以使回收站视图占据整个屏幕,以便回收站视图可以根据用户的意愿滚动​​。

然后,如果“回收者”视图已占据屏幕的所有空间,则上方的线性布局将不再可见,如果用户不断向上滚动,则仅在“回收者”视图已到达顶部/第一项时才会显示

2 个答案:

答案 0 :(得分:0)

Read this.

app:layout_behavior="@string/appbar_scrolling_view_behavior"添加到您的回收站xml中。

<android.support.v7.widget.RecyclerView
    android:id="@+id/conversation"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

答案 1 :(得分:0)

NestedScrollView平滑滚动

recyclerView.isNestedScrollingEnabled = true

以编程方式执行

 <androidx.core.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="0dp"
        android:fillViewport="true"
        ...