程序上嵌套的片段在导航上不反映父母的生命周期。

问题描述 投票:0回答:1

希望有人能在这里帮助我。

我有两个非常简单的片段被设置为NavHostFragment的目的地,我正在使用navigate在它们之间移动,具体如下。

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

片段一是使用以下方式动态添加一个片段到自己身上。

    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()
        }
    }

当我点击从Fragment 1导航到Fragment 2时,我可以看到Fragment 1如预期的那样通过onPaused、onStop和onDestoryView。但我没有得到子片段的匹配调用。而如果我通过XML将Sub Fragment切换为静态添加,它就会在移除时镜像生命周期调用。我是否需要手动触发动态片段的生命周期,如果需要,如何触发?

片段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" />

android android-fragments android-lifecycle android-navigation
1个回答
0
投票

所以我的错误是我使用了

 val fm = requireActivity().supportFragmentManager

我的理解是,这将使片段与活动的生命周期相同,而不是片段1。正确的方法是。

val fm = childFragmentManager

希望这能帮助别人

© www.soinside.com 2019 - 2024. All rights reserved.