更新后,CollapsingToolbarLayout将显示在RecyclerView下

时间:2016-02-21 17:55:00

标签: android android-recyclerview android-collapsingtoolbarlayout

我已经在片段中设置了一个带有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,所以当收到通知时我可以做些什么......问题是什么?

2 个答案:

答案 0 :(得分:0)

嗯,将CollapsingToolbar设置为Gone,然后再次显示可见......虽然看起来很随意。

答案 1 :(得分:0)

将以下代码行添加到recycler_listview:

app:layout_behavior="@string/appbar_scrolling_view_behavior"

上面的代码告诉CollapsingToolbarLayout将要在屏幕上滚动的内容,因此应该显示在CollapsingToolbarLayout之下。