Android NestedScrollView布局中的RecyclerView未滚动

Android NestedScrollView布局中的RecyclerView未滚动,android,android-recyclerview,android-collapsingtoolbarlayout,Android,Android Recyclerview,Android Collapsingtoolbarlayout,在NestedScrollView中的RecyclerView中,在折叠工具栏布局旁边滚动时,我遇到一些问题。 问题是RecyclerView不滚动,而CollappingToolbarLayout不展开/折叠。 以下是XML: <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.androi

在NestedScrollView中的RecyclerView中,在折叠工具栏布局旁边滚动时,我遇到一些问题。
问题是RecyclerView不滚动,而CollappingToolbarLayout不展开/折叠。 以下是XML:

 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layoutDirection="rtl"
tools:context=".MainActivity">

<android.support.design.widget.CoordinatorLayout
    android:id="@+id/rootLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="256dp"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsingToolbarLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:elevation="12dp"
            app:contentScrim="?attr/colorPrimary"
            app:expandedTitleMarginEnd="64dp"
            app:expandedTitleTextAppearance="@color/trans"
            app:layout_scrollFlags="scroll|enterAlwaysCollapsed">

            <ImageView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:scaleType="centerCrop"
                android:src="@drawable/header" />

            <ImageView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:scaleType="centerCrop"
                android:src="@drawable/header_basij" />

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:minHeight="?attr/actionBarSize"
                android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
                app:layout_collapseMode="pin"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

        </android.support.design.widget.CollapsingToolbarLayout>

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fadeScrollbars="true"
        android:fillViewport="true"
        android:scrollbarDefaultDelayBeforeFade="1000"
        android:scrollbarFadeDuration="2000"
        android:scrollbars="vertical"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <LinearLayout
            android:id="@+id/containerLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <pl.droidsonroids.gif.GifImageView
                android:id="@+id/pbar"
                android:layout_width="100dp"
                android:layout_height="30dp"
                android:layout_gravity="center"
                android:layout_marginTop="8dp"
                android:background="@color/trans"
                android:src="@drawable/loader"
                />

            <LinearLayout
                android:id="@+id/interneterror"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="20dp"
                android:orientation="vertical"
                android:visibility="visible">

                <TextView
                    android:id="@+id/errorhandler"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:gravity="center"
                    android:text="خطا در اتصال به اینترنت"
                    android:textColor="#212121" />

                <Button
                    android:id="@+id/tryagainme"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="سعی دوباره"
                    android:textColor="@color/colorPrimary" />

            </LinearLayout>

            <android.support.v7.widget.RecyclerView
                xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:id="@+id/recyclerView"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:fadeScrollbars="true"
                android:layoutDirection="rtl"
                android:scrollbars="vertical"
                tools:context=".MainActivity"/>

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

</android.support.design.widget.CoordinatorLayout>

<android.support.design.widget.NavigationView
    android:id="@+id/navigation"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:layoutDirection="rtl"
    app:headerLayout="@layout/navigation_header"
    app:itemIconTint="@color/nav_item_icon_tint_color"
    app:itemTextColor="@color/nav_item_text_color"
    app:menu="@menu/navigation_menu" />

</android.support.v4.widget.DrawerLayout>  


感谢您的帮助。

您需要调用“
recyclerView.setNestedScrollingEnabled(false)

原因是
NestedScrollView
在从recyclerView接收滚动事件时不调用AppBarLayout.Behavour类。也就是说,当在recyclerview中发生滚动时,recyclerview将滚动进度分派/传递到
NestedScrollView
NestedScrollView
接收滚动事件,但不对其执行任何操作

内置嵌套滚动视图类

@Override
public void onNestedpreScroll(View target,int dx, int dy, int[] consumed){
         //Do nothing
}
要克服此问题并使appbarlayout在滚动recyclerview时展开/折叠,只需创建一个自定义类,该类扩展NestedScrollView并覆盖上述方法,并调用方法
dispatchNestedPreScroll()
,该方法通知appbarlayout滚动事件并使其响应

  public class CustomNestedScrollView extends NestedScrollView{

    public CustomNestedScrollView(Context context) {
    super(context);
    }

    public CustomNestedScrollView(Context context, AttributeSet attrs) {
    super(context, attrs);
    }

    public CustomNestedScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    }

  @Override
  public void onNestedPreScroll(View target, int dx, int dy, int[] consumed){
    dispatchNestedPreScroll(dx,dy,consumed,null);
  }
}
然后在layout.xml中使用这个类

<com.my.package.CustomNestedScrollView
    android:id="@+id/scroll"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

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

   /*
       CONTENT
   */

</LinearLayout>

/*
内容
*/

可能重复的@Ram
recyclerView.setNestedScrollingEnabled(false)
只能在api级别21及以上工作。因此,不是较低API的解决方案
ViewCompat.setNestedScrollingEnabled(recyclerView,false)
这对我不起作用!!这很复杂(至少对我来说),而且似乎有点过度编码。我没做这些就解决了这个问题。。我鼓励读者们找到更简单的方法。因为有!