2

当我向下滚动时,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 的事实

要修复什么?

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

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

理想的情况是先让scrollview向下滚动,让recyclerview占据整个屏幕,这样recyclerview就会按照用户的意愿滚动​​。

然后,如果回收站视图占用了屏幕的所有空间,则上面的线性布局应该不再可见,如果用户继续向上滚动,则只有当回收站视图到达顶部/第一项时才会显示。

4

2 回答 2

0

读这个。

添加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" />
于 2018-12-27T18:26:37.870 回答
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"
        ...
于 2018-12-27T18:36:09.863 回答