RecyclerView в макете NestedScrollView без прокрутки

У меня есть некоторые проблемы с прокруткой в ​​RecyclerView внутри NestedScrollView, рядом с CollapsingToolbarLayout.
Проблема заключается в том, что RecyclerView не прокручивает и не сворачиваетToolbarLayout не разворачивает / сворачивает. Вот 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 не вызывает класс AppBarLayout.Behavour, когда он получает события прокрутки из recyclerview. NestedScrollView есть, когда прокрутка происходит в recyclerview, recyclerview отправляет / передает ход прокрутки в NestedScrollView . 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> 
Intereting Posts