从 ViewPager2 的嵌套片段导航回来的正确方法是什么?
尽管使用app:defaultNavHost="true"
与FragmentContainerView
在页面的分片嵌套按后退按钮同时呼吁活动的背压,而不是导航回到以前的片段。
根据创建 NavHostFragment 文档,在首次添加 Fragment 时app:defaultNavHost="true"
调用setPrimaryNavigationFragment()
- 它将setPrimaryNavigationFragment()
返回按钮按下事件自动路由到该片段。
在一个ViewPager2
虽然,它是ViewPager2,负责创建和添加的片段。由于 Fragment 层次结构的每一层都需要作为主导航片段,通过 XML 添加子片段仍然不能解决缺失的链接:ViewPager2 中的 Fragment 需要作为主导航片段。
因此,当 Fragment 成为活动 Fragment 并调用setPrimaryNavigationFragment()
. ViewPager2 1.1.0-alpha01 在 中添加了这个 API FragmentTransactionCallback
,特别是onFragmentMaxLifecyclePreUpdated()
,每当 Fragment 的生命周期状态发生变化时都会调用它:当它更改为 时RESUMED
,该 Fragment 现在是活动 Fragment 并且应该成为主要导航 Fragment作为onPost
回调的一部分。
private class Adapter(parentFragment: Fragment) : FragmentStateAdapter(parentFragment) {
init {
// Add a FragmentTransactionCallback to handle changing
// the primary navigation fragment
registerFragmentTransactionCallback(object : FragmentTransactionCallback() {
override fun onFragmentMaxLifecyclePreUpdated(
fragment: Fragment,
maxLifecycleState: Lifecycle.State
) = if (maxLifecycleState == Lifecycle.State.RESUMED) {
// This fragment is becoming the active Fragment - set it to
// the primary navigation fragment in the OnPostEventListener
OnPostEventListener {
fragment.parentFragmentManager.commitNow {
setPrimaryNavigationFragment(fragment)
}
}
} else {
super.onFragmentMaxLifecyclePreUpdated(fragment, maxLifecycleState)
}
})
}
// The rest of your FragmentStateAdapter...
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句