当导航组件切换到一个片段时,我会遇到这个“必须将添加到FragmentContainerView中的视图与片段关联”崩溃。这是什么原因?
我没有在任何地方看到这个提到过,而且花了一段时间才弄清楚,在这种情况下,我尝试在迁移到 nav arch 组件时设置一个旧的遗留片段。
原因在于 frag 的 onCreateView
中的 inflate 看起来像:
layoutView = inflater.inflate( R.layout.home, container, false );
最后一个参数自动将视图附加到容器。这在旧样式的片段和活动中很好地工作。但是,它在导航体系结构组件中不起作用,因为根容器是一个FragmentContainerView
,只允许将片段附加到其中。
将最后一个参数设置为false可以使其正常工作。
只需替换您的onViewCreated方法。
class MyFragment : Fragment() {
override fun onCreateView( inflater: LayoutInflater,container: ViewGroup?, savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_post,container,false)
}
}
false
值作为第三个参数传递给inflate()
方法。添加这个布尔值可以解决问题。 - Mickäel A.lifeCycleScope
,请确保至少在 Lifecycle.State.STARTED
状态下启动和运行该块。