在ViewPager Fragment中使用NestedScrollView在CoordinatorLayout Android中突然滚动

我在CoordinatorLayout面对ViewPager一个主要的滚动问题。

目前的情况:

  1. app:appbarScrollingViewBehaviourViewPagerViewPager
  2. ViewPager片段将NestedScrollView作为其父级。
  3. 片段布局包含水平RecyclerView
  4. 当我通过触摸RecyclerView向上滚动时,应用程序栏不会滚动,而只会发生嵌套滚动。
  5. 当我通过触摸视图的其余部分进行滚动时, CoordinatorLayout滚动。 6)也嵌套滚动中途停止,并切断内容。

我已经尝试过了:

  1. ViewPager放在NestedScrollView ,并将app:appbarScrollingViewBehaviour属性设置为NestedScrollView 。 由于RecyclerView无法确定其高度,因此完全切断片段内容。
  2. RecyclerView上设置setAutoMeasureEnabled(true) ,仍然无法修复高度。
  3. 和其他许多方法。

    请帮助解决这个问题。 目前的行为可以在上传的.gif中看到。 我也张贴我的代码活动布局和片段布局和RecyclerView行布局。

谢谢

activity.xml:

 <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:Customs="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/main_content" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/new_color_primary_skim"> <android.support.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/transparent"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsingLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" android:elevation="0dp" app:layout_scrollFlags="scroll|exitUntilCollapsed" android:minHeight="?attr/actionBarSize"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:fitsSystemWindows="true" app:layout_scrollFlags="scroll|enterAlways" android:layout_height="?attr/actionBarSize"> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:layout_width="30dp" android:layout_height="30dp" android:layout_gravity="center_vertical" android:src="@drawable/ic_arrow_back" /> <com.fitsquare.app.fitsquare.Entity.Customs.CustomFontTextView android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="center_horizontal" android:gravity="center_vertical" android:text="Workout" android:textColor="#FFFFFF" android:textSize="19sp" android:textStyle="bold" Customs:font="LatoRegular.ttf" /> </FrameLayout> </android.support.v7.widget.Toolbar> <com.github.mikephil.charting.charts.LineChart android:id="@+id/workout_insights_graph" android:layout_width="match_parent" android:layout_height="150dp" android:layout_below="@+id/toolbar" app:layout_scrollFlags="scroll|snap" android:layout_marginTop="?attr/actionBarSize" app:layout_collapseMode="parallax" android:animateLayoutChanges="true" /> <com.fitsquare.app.fitsquare.Entity.Customs.SlidingTabLayout android:id="@+id/tabs" android:layout_width="match_parent" android:layout_below="@+id/diet_insights_graph" android:layout_height="50dp" android:layout_gravity="bottom" android:background="@color/transparent" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right|top" android:layout_marginRight="-50dp" android:layout_marginTop="-50dp" android:src="@drawable/workout_translucent" /> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <android.support.v4.view.ViewPager android:id="@+id/view_pager" android:layout_width="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" android:layout_height="wrap_content"> </android.support.v4.view.ViewPager> </android.support.design.widget.CoordinatorLayout> 

pager_fragment.xml:

 <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:Customs="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:card_view="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingLeft="7dp" android:paddingRight="7dp" android:paddingTop="10dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:orientation="vertical"> <LinearLayout android:layout_width="100dp" android:layout_height="4dp" android:layout_marginTop="10dp" android:alpha="0.5" android:background="@drawable/round_gray_dark" android:orientation="horizontal"></LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:gravity="center_vertical" android:orientation="horizontal"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:paddingLeft="10dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:orientation="horizontal"> <com.fitsquare.app.fitsquare.Entity.Customs.CustomFontTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Target Calories to burn : " android:textColor="@color/white" android:textSize="14sp" Customs:font="LatoRegular.ttf" /> <com.fitsquare.app.fitsquare.Entity.Customs.CustomFontTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="2300" android:textColor="@color/white" android:textSize="14sp" android:textStyle="bold" Customs:font="LatoRegular.ttf" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:orientation="horizontal"> <com.fitsquare.app.fitsquare.Entity.Customs.CustomFontTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Burned calories : " android:textColor="@color/white" android:textSize="14sp" Customs:font="LatoRegular.ttf" /> <com.fitsquare.app.fitsquare.Entity.Customs.CustomFontTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="2300" android:textColor="@color/white" android:textSize="14sp" android:textStyle="bold" Customs:font="LatoRegular.ttf" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:orientation="horizontal"> <com.fitsquare.app.fitsquare.Entity.Customs.CustomFontTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Total workout time : " android:textColor="@color/white" android:textSize="14sp" Customs:font="LatoRegular.ttf" /> <com.fitsquare.app.fitsquare.Entity.Customs.CustomFontTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="20 mins" android:textColor="@color/white" android:textSize="14sp" android:textStyle="bold" Customs:font="LatoRegular.ttf" /> </LinearLayout> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="100dp" android:layout_height="4dp" android:layout_marginTop="10dp" android:alpha="0.5" android:background="@drawable/round_gray_dark" android:orientation="horizontal"></LinearLayout> </LinearLayout> <com.fitsquare.app.fitsquare.Entity.Customs.CustomFontTextView android:id="@+id/textView27" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="Today" android:textColor="@color/white" android:textSize="21sp" Customs:font="LatoRegular.ttf" /> <LinearLayout android:layout_width="100dp" android:layout_height="4dp" android:layout_marginTop="5dp" android:alpha="0.5" android:background="@drawable/round_gray_dark" android:orientation="horizontal"></LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:orientation="vertical"> <android.support.v7.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="wrap_content"> </android.support.v7.widget.RecyclerView> <com.fitsquare.app.fitsquare.Entity.Customs.CustomFontTextView android:id="@+id/textView31" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Tomorrow" android:textColor="@color/white" android:textSize="21sp" Customs:font="LatoRegular.ttf" /> <LinearLayout android:layout_width="100dp" android:layout_height="4dp" android:layout_marginTop="5dp" android:alpha="0.5" android:background="@drawable/round_gray_dark" android:orientation="horizontal"></LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:paddingLeft="10dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:orientation="horizontal"> <com.fitsquare.app.fitsquare.Entity.Customs.CustomFontTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Target Calories to burn : " android:textColor="@color/white" android:textSize="14sp" Customs:font="LatoRegular.ttf" /> <com.fitsquare.app.fitsquare.Entity.Customs.CustomFontTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="2300" android:textColor="@color/white" android:textSize="14sp" android:textStyle="bold" Customs:font="LatoRegular.ttf" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:orientation="horizontal"> <com.fitsquare.app.fitsquare.Entity.Customs.CustomFontTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Total workout time : " android:textColor="@color/white" android:textSize="14sp" Customs:font="LatoRegular.ttf" /> <com.fitsquare.app.fitsquare.Entity.Customs.CustomFontTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="20 mins" android:textColor="@color/white" android:textSize="14sp" android:textStyle="bold" Customs:font="LatoRegular.ttf" /> </LinearLayout> </LinearLayout> </LinearLayout> </LinearLayout> <!-- <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true" android:src="@color/transparent" />--> </FrameLayout> </android.support.v4.widget.NestedScrollView> 

Solutions Collecting From Web of "在ViewPager Fragment中使用NestedScrollView在CoordinatorLayout Android中突然滚动"

我find了解决办法,自己解决了这个问题。 由于水平RecyclerView是嵌套滚动视图的子项,因此不会将滚动事件传输到CoordinatorLayout。 我只是通过使用这行代码禁用嵌套滚动来解决它。

recyclerView.setNestedScrollingEnabled(false);