Приложение, над которым я работаю, состоит из ящика навигации, который реализован в Activity. Макет действия выглядит следующим образом:
<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>
Это очень распространенный шаблон, только часто изменяющееся значение - это фрагмент внутри макета контейнера.
Если какой-либо из фрагментов имеет прокручиваемый элемент, при прокрутке координаторLayout с радостью сделает переводы положения, включая панель инструментов /AppBarLayout.
Реальная проблема здесь в том, что при замене фрагмента позиция для панели инструментов остается той же, то есть, если панель инструментов скрыта, она останется такой который не предназначен.
Результат:
Это:
Задерживается:
Как можно reset позиция панели инструментов для этого случая?
EDIT: Вероятно, ошибка, прослушиватель изменений смещения AppBarLayout вызывается только при повторном запуске приложения (нажмите кнопку "Назад" и откройте приложение) и перестанет получать вызов снова после интенсивного перехода.