“添加到 FragmentContainerView 的视图必须与 Fragment 关联”与 android Nav 组件

ken*_*yee 15 android android-architecture-navigation

当导航组件切换到片段时,我收到此“添加到 FragmentContainerView 的视图必须与片段相关联”崩溃。这是什么原因造成的?

ken*_*yee 29

我在任何地方都没有看到这一点,花了一段时间才弄明白,但在这种情况下,我试图在迁移到导航拱组件时设置一个旧的遗留片段。

原因是在 frag's 中onCreateView,inflate 看起来像:

layoutView = inflater.inflate( R.layout.home, container, true );
Run Code Online (Sandbox Code Playgroud)

最后一个参数自动将视图附加到容器。这适用于旧式片段和活动。它不适用于导航拱组件,因为根容器是一个FragmentContainerView只允许将片段附加到它的。

将最后一个参数设置为 false 使其正常工作。

  • [片段在附加视图之前要做一些事情](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-master-dev:fragment/fragment/src/main/java/ androidx/fragment/app/FragmentStateManager.java;l=490-497),因此即使不使用“FragmentContainerView”,使用“true”也会破坏很多事情,这只是最明显的一个。 (5认同)
  • 看起来如果您没有指定 AttachToRoot 来发生通货膨胀。这修复了它 -> inflater.inflate(R.layout.fragment_my_fragment,container, false) (2认同)