программно вложенные фрагменты не отражают жизненный цикл родителей при навигации - PullRequest
0 голосов
/ 08 мая 2020

надеюсь, что кто-то может мне здесь помочь,

У меня есть два очень простых фрагмента, настроенных в качестве пунктов назначения NavHostFragment, и я перемещаюсь между ними, используя навигацию следующим образом:

findNavController().navigate(R.id.action_fragment1_to_fragment2)

Фрагмент 1 - это динамическое добавление фрагмента к самому себе, используя следующее:

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        if (savedInstanceState == null) {
            var fragment = SubFragment()
            val fm = requireActivity().supportFragmentManager
            val ft = fm
                .beginTransaction()
                .add(R.id.container, fragment)
                .commit()
        }
    }

Когда я нажимаю для перехода от фрагмента 1 к фрагменту 2, я вижу, что фрагмент 1 проходит через onPaused, onStop и onDestoryView, как и ожидалось. Но я не получаю соответствующих вызовов для субфрагмента. Если я переключаю субфрагмент на статическое добавление через XML, он отражает вызовы жизненного цикла при удалении. Нужно ли вручную запускать жизненный цикл для фрагментов Dynami c, и если да, то как?

Макет фрагмента 1


    <androidx.appcompat.widget.AppCompatTextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/fragOneHead"
        android:text="Fragment One"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <FrameLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/fragOneHead"
        android:orientation="vertical" />

1 Ответ

0 голосов
/ 08 мая 2020

, поэтому моя ошибка в том, что я использовал

 val fm = requireActivity().supportFragmentManager

, который дал бы фрагменту тот же жизненный цикл, что и действие, а не фрагмент 1, как я понимаю. Правильный метод:

val fm = childFragmentManager

Надеюсь, это поможет кому-то другому

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...