在我使用片段的Android项目中。一切都按预期工作,直到我将 Jetpack Compose 集成到项目中。添加 Compose 后,我遇到了一个问题,即我的片段在导航过程中行为不正确,尤其是在背面。
集成 Compose 之前:
FragmentOne
导航到 FragmentTwo
效果很好。FragmentOne
,并且我会看到预期的生命周期回调(onCreate
、onViewCreated
、onStart
、onResume
)。集成 Compose 后:
FragmentTwo
仍然有效。FragmentOne
,但FragmentOne
内的子片段不会重新创建。onCreate
、onViewCreated
等)不会被调用,并且其视图不会恢复。集成 Compose 之前(按回重新创建两个片段):
onViewCreated -> FragmentOne
onViewCreated -> ChildFragment
onStart -> FragmentOne
onStart -> ChildFragment
onResume -> FragmentOne
onResume -> ChildFragment
集成 Compose 后(按回键仅重新创建 FragmentOne):
onViewCreated -> FragmentOne
onStart -> FragmentOne
onResume -> FragmentOne
分片交易代码:
// Navigating to FragmentOne
fun presentFragmentOne() {
val fragment = FragmentOne()
supportFragmentManager.beginTransaction()
.replace(R.id.fragmentContainer, fragment, "fragmentOne")
.commit()
}
// Navigating to FragmentTwo
fun presentFragmentTwo() {
val fragment = FragmentTwo()
supportFragmentManager.beginTransaction()
.setCustomAnimations(
R.anim.slide_in_right,
R.anim.slide_out_left,
R.anim.slide_in_left,
R.anim.slide_out_right
)
.replace(R.id.fragmentContainer, fragment, "fragmentTwo")
.addToBackStack(null)
.commit()
}
我尝试过的:
问题:
FragmentOne
的子片段?FragmentOne
中的子片段?附加信息:
FragmentContainerView
来托管片段。提前致谢!
Kotlin 扩展导致了此问题。由于 kotlin 合成物已贬值,该行为正在发生。只需简单地删除合成并替换为视图绑定即可解决问题。