希望有人能在这里帮助我。
我有两个非常简单的片段被设置为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" />
所以我的错误是我使用了
val fm = requireActivity().supportFragmentManager
我的理解是,这将使片段与活动的生命周期相同,而不是片段1。正确的方法是。
val fm = childFragmentManager
希望这能帮助别人