程序嵌套的片段不会在导航上镜像父生命周期



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

我有两个非常简单的片段设置为NavHostFragment的目的地,我使用如下导航在它们之间移动:

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

当我点击从片段1导航到片段2时,我可以看到片段1按预期经过onPaused、onStop和onDestoryView。但是我没有得到子片段的匹配调用。然而,如果我通过XML将子片段切换为静态添加,它将反映删除时的生命周期调用。我需要手动触发动态碎片的生命周期吗?如果需要,如何触发?

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

所以我的错误是我使用了

val fm = requireActivity().supportFragmentManager

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

val fm = childFragmentManager

希望这能帮助其他

最新更新