Есть главная активность
MainActivity, в которой расположен
framelayout<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/mainContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
Туда помещается фрагмент с навигацией, где происходит переключение вложенных фрагментов по табам.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/navigationContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/tabLayout" />
<android.support.design.widget.TabLayout
android:id="@+id/tabLayout"
style="@style/AppTabLayout"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:layout_alignParentBottom="true"
android:background="#FFFFFF"
android:elevation="@dimen/size_medium"
tools:targetApi="lollipop">
<android.support.design.widget.TabItem
android:layout_width="@dimen/size_large"
android:layout_height="@dimen/size_large"
android:icon="@drawable/ic_nav_main" />
<android.support.design.widget.TabItem
android:layout_width="@dimen/size_large"
android:layout_height="@dimen/size_large"
android:icon="@drawable/ic_nav_popular" />
<android.support.design.widget.TabItem
android:layout_width="@dimen/size_large"
android:layout_height="@dimen/size_large"
android:icon="@drawable/ic_nav_favorites" />
</android.support.design.widget.TabLayout>
</RelativeLayout>
Меняю фрагменты таким образом:
val transaction = fragmentManager?.beginTransaction()
transaction?.replace(R.id.navigationContainer, fragment, screenKey)
?.addToBackStack(screenKey)?.commit()
Когда нужно отобразить фрагмент без нижней навигации, то меняю фрагмент не через navigationContainer, а через mainContainer.
val transaction = fragmentManager?.beginTransaction()
transaction?.replace(R.id.mainContainer fragment, screenKey)
?.addToBackStack(screenKey)?.commit()
И когда мы жмём кнопку назад, то у нас отображается фрагмент c навигацией, но вложенный фрагмент в контейнере navigationContainer становится пустым.