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 中我遇到了一些奇怪的问题:

  1. 我有一个目标更改监听器,在后退按钮中点击片段被弹出但目标监听器没有被调用
  2. 返回时,例如从 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

中内部修复