jetpack 导航版本 2.4.0-rc01 存在自定义片段工厂问题
jetpack navigation version 2.4.0-rc01 has issue with custom fragment factory
在导航组件版本 2.3.5 中一切正常,但在版本 2.4.0-rc01 中我遇到了一些奇怪的问题:
- 我有一个目标更改监听器,在后退按钮中点击片段被弹出但目标监听器没有被调用
- 返回时,例如从 Cfragment 到 Bfragment,我打印当前目的地 ID,它显示当前目的地是 Cfragment 但在 UI 应用程序在 Bfragmnet
降级到版本 2.3.5 或使用默认的 navHostFragment 所有问题都已解决。
片段工厂class:
class MyFragmentFactory @Inject constructor(
) : FragmentFactory() {
override fun instantiate(classLoader: ClassLoader, className: String): Fragment {
return when (className) {
AFragment::class.java.name -> {
AFragment()
}
BFragment::class.java.name -> {
BFragment()
}
CFragment::class.java.name -> {
CFragment()
}
FirstFragment::class.java.name -> {
FirstFragment()
}
else -> super.instantiate(classLoader, className)
}
}
}
自定义导航主机片段:
@AndroidEntryPoint
class MyNavHostFragment : NavHostFragment() {
@Inject
lateinit var fragmentFactory: MyFragmentFactory
override fun onAttach(context: Context) {
super.onAttach(context)
childFragmentManager.fragmentFactory = fragmentFactory
}
}
这是我的full source code,在各个分支中有不同版本的导航组件,主分支是一个有问题的分支
在 google issue tracker 中提交此错误后,他们说此错误已在导航组件版本 2.4.1 和 2.5.0-alpha02
中内部修复
在导航组件版本 2.3.5 中一切正常,但在版本 2.4.0-rc01 中我遇到了一些奇怪的问题:
- 我有一个目标更改监听器,在后退按钮中点击片段被弹出但目标监听器没有被调用
- 返回时,例如从 Cfragment 到 Bfragment,我打印当前目的地 ID,它显示当前目的地是 Cfragment 但在 UI 应用程序在 Bfragmnet
降级到版本 2.3.5 或使用默认的 navHostFragment 所有问题都已解决。
片段工厂class:
class MyFragmentFactory @Inject constructor(
) : FragmentFactory() {
override fun instantiate(classLoader: ClassLoader, className: String): Fragment {
return when (className) {
AFragment::class.java.name -> {
AFragment()
}
BFragment::class.java.name -> {
BFragment()
}
CFragment::class.java.name -> {
CFragment()
}
FirstFragment::class.java.name -> {
FirstFragment()
}
else -> super.instantiate(classLoader, className)
}
}
}
自定义导航主机片段:
@AndroidEntryPoint
class MyNavHostFragment : NavHostFragment() {
@Inject
lateinit var fragmentFactory: MyFragmentFactory
override fun onAttach(context: Context) {
super.onAttach(context)
childFragmentManager.fragmentFactory = fragmentFactory
}
}
这是我的full source code,在各个分支中有不同版本的导航组件,主分支是一个有问题的分支
在 google issue tracker 中提交此错误后,他们说此错误已在导航组件版本 2.4.1 和 2.5.0-alpha02
中内部修复