@Lordao

Как отобразить вложенный фрагмент после возврата?

Есть главная активность 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 становится пустым.
  • Вопрос задан
  • 144 просмотра
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Android
Android developer at Yandex
Для того, чтобы это работало правильно, вложенные фрагменты (те, которые добавляются в R.id.navigationContainer) нужно добавлять не через главный FragmentManager, а через ChildFragmentManager, который можно получить у фрагмента.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы