Como redefinir a posição da barra de ferramentas controlada pelo CoordinatorLayout?
O aplicativo em que estou trabalhando consiste em uma gaveta de navegação que é implementada em uma atividade. O layout da atividade é o seguinte:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.CoordinatorLayout
android:id="@+id/coordinator"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<include
android:id="@+id/appbar"
layout="@layout/appbar" />
</android.support.design.widget.CoordinatorLayout>
<android.support.design.widget.NavigationView
android:id="@+id/navigation_drawer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/header_drawer"
app:menu="@menu/menu_nav">
</android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>
</FrameLayout>
Esse é um padrão muito comum, a única coisa que muda com frequência é o fragmento dentro do layout do contêiner.
Se qualquer um dos fragmentos tiver um elemento de rolagem, durante a rolagem, o CoordinatorLayout fará alegremente traduções de posição, incluindo a Barra de Ferramentas / AppBarLayout.
O verdadeiro problema aqui é que, quando o fragmento é substituído, a posição da barra de ferramentas permanece a mesma, ou seja, se a barra de ferramentas estiver oculta, ela permanecerá assim que não se destina.
O resultado é este:
Este:
Fica preso:
Como alguém pode redefinir a posição da barra de ferramentas para este caso?
EDITAR: É provável que haja um erro, o ouvinte de alterações de deslocamento do AppBarLayout é chamado apenas ao reiniciar o aplicativo (pressione o botão Voltar e abra o aplicativo) e para de ser chamado novamente após um intenso fling.