显示片段时停止滚动 CollapsingToolbarLayout

Stop Scrolling for CollapsingToolbarLayout when showing a Fragment

我在 Activity 中有一个 ViewPager,它显示两个 Fragments

activity 有一个 TabLayout 和一个 CollapsingToolbarLayoutCollapsingToolbarLayoutImageView 嵌套在 AppBarLayout 内以产生视差效果。 TabLayoutAppBarLayout 外面,在 LinearLayoutViewPager 里面。然后还有一个 FrameLayout 以及在 ViewPager 上显示另一个 Fragment 当用户单击一个按钮以显示 Fragment.

问题是,当您在 Fragment 内滚动覆盖在 ViewPager 之上的 RecyclerView 时,Activity 也会滚动并产生视差效果。本质上它会滚动 Fragment 内的 RecyclerViewViewPager 内的内容。

有没有一种方法可以停止滚动 CollapsingToolbarLayout 并仅在用户看到 Fragment 时滚动叠加层 Fragment 中的内容?

这就是我的 XML 层次结构:

<android.support.design.widget.CoordinatorLayout>

<android.support.design.widget.AppBarLayout>

    <android.support.design.widget.CollapsingToolbarLayout
        app:layout_scrollFlags="scroll|exitUntilCollapsed">

        <ImageView
            app:layout_collapseMode="parallax"/>

        <android.support.v7.widget.Toolbar />

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

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

<LinearLayout
    app:layout_behavior="@string/appbar_scrolling_view_behavior" >

    <android.support.design.widget.TabLayout />
    <!-- Two fragments inside ViewPager each containing a RecyclerView -->
    <android.support.v4.view.ViewPager />

</LinearLayout>

<!-- User Clicks a button and fragment is added to this framelayout -->
<!-- This fragment overlays on top of the entire Activity layout -->
<!-- This fragment also contains a recyclerview -->
<FrameLayout/>


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

尝试使用嵌套滚动视图而不是线性布局。

CoordinatorLayoutAppBarLayout 通过来自 children 的 onNestedScroll 回调操作。如果您有滚动 child,您可以通过禁用此回调来阻止它影响其 parent/s:

recyclerView.setNestedScrollingEnabled(false);