我已经在片段中设置了一个带有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
,所以当收到通知时我可以做些什么......问题是什么?
答案 0 :(得分:0)
嗯,将CollapsingToolbar设置为Gone,然后再次显示可见......虽然看起来很随意。
答案 1 :(得分:0)
将以下代码行添加到recycler_listview:
app:layout_behavior="@string/appbar_scrolling_view_behavior"
上面的代码告诉CollapsingToolbarLayout将要在屏幕上滚动的内容,因此应该显示在CollapsingToolbarLayout之下。