更新时,CollapsingToolbarLayout 出现在 RecyclerView 下

CollapsingToolbarLayout is appearing under RecyclerView when updated

我在片段中设置了一个带有 CollapsingToolbar 和 RecyclerView 的 CoordinatorLayout:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/wholeCoordinatorLayout"
android:animateLayoutChanges="true"
android:background="@color/my_background">
<android.support.design.widget.AppBarLayout
    android:id="@+id/myAppBarLayout"
    android:layout_width="match_parent"
    android:layout_height="@dimen/expanded_height"
    android:fitsSystemWindows="true"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/collapsingToolbar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        app:contentScrim="@color/collapsed_color"
        app:expandedTitleMarginBottom="12dp"
        app:expandedTitleTextAppearance="@style/TransparentText"
        app:collapsedTitleTextAppearance="@style/CollapsedAppBar"
        app:expandedTitleGravity="top|center_horizontal"
        app:collapsedTitleGravity="center"
        app:layout_scrollFlags="scroll|exitUntilCollapsed">
        <ImageView
            android:id="@+id/bannerBgImage"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:src="@drawable/banner_bg"
            android:fitsSystemWindows="true"
            app:layout_collapseMode="parallax"
            android:scaleType="centerCrop" />
        <LinearLayout
            android:id="@+id/headerTextLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:minHeight="@dimen/collapsed_height"
            android:orientation="vertical"
            app:layout_collapseMode="parallax"
            android:paddingTop="10dp">
            <TextView
                android:id="@+id/headerLabel"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:text="@string/title"
                android:textSize="20dp"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textStyle="bold"
                fontPath="@string/bold_font"
                android:textColor="@color/my_text_color"
                android:layout_gravity="center_horizontal"
                android:gravity="center" />
            <TextView
                android:id="@+id/mainLabel"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="16dp"
                android:text="@string/text_main"
                android:textSize="15dp"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textColor="@color/my_text_color"
                android:layout_gravity="center_horizontal"
                android:gravity="center" />
            <Button
                android:id="@+id/expandedButton"
                android:layout_width="match_parent"
                android:layout_height="40dp"
                android:layout_marginTop="18dp"
                android:layout_marginLeft="60dp"
                android:layout_marginRight="60dp"
                android:background="@drawable/my_button"
                android:text="@string/button_text"
                android:textSize="15dp"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:layout_gravity="center_horizontal"
                android:gravity="center"
                android:textColor="@color/button_text_color" />
        </LinearLayout>
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="@dimen/collapsed_height"
            android:layout_gravity="top"
            app:layout_scrollFlags="scroll|enterAlways" />
    </android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<include
    layout="@layout/recycler_listview" />
</android.support.design.widget.CoordinatorLayout>

一切正常,我可以上下滚动,工具栏展开和折叠。

但是:

在我的应用程序生命周期的某些时刻,列表中的数据会发生变化(显示在 RecyclerView 中)。我的 RacyclerView.ListAdapter 中有一个侦听器,当它注册数据更改时,它会调用 NotifyDataSetChanged 来更新列表。发生这种情况时,我的列表(当然)会重绘,但由于某种原因,它会重绘到折叠的工具栏上。我不确定是否发生了这种情况,因为我的工具栏刚刚消失了,但是当我将 LinearListAdapter 更改为 GridListAdapter 时,我可以看到网格项后面的工具栏。一旦我开始滚动一点,列表就会使用列表上方的工具栏自行调整 - 但我想阻止这种情况发生。有谁知道我需要什么魔法吗?

我已经覆盖了 RecyclerView.AdapterDataObserver 这样我就可以在收到通知时做一些事情...问题是什么?

嗯,设置 CollapsingToolbar Gone 然后 Visible 再次起作用....虽然看起来很随机。

将以下代码行添加到 recycler_listview:

app:layout_behavior="@string/appbar_scrolling_view_behavior"

以上代码告诉 CollapsingToolbarLayout 将在屏幕上滚动的内容,因此应该出现在 CollapsingToolbarLayout 下方。