使用FragmentContainerView添加的视图必须与Fragment相关联,使用Android Nav组件。

23
当导航组件切换到一个片段时,我会遇到这个“必须将添加到FragmentContainerView中的视图与片段关联”崩溃。这是什么原因?
3个回答

45

我没有在任何地方看到这个提到过,而且花了一段时间才弄清楚,在这种情况下,我尝试在迁移到 nav arch 组件时设置一个旧的遗留片段。

原因在于 frag 的 onCreateView 中的 inflate 看起来像:

layoutView = inflater.inflate( R.layout.home, container, false );

最后一个参数自动将视图附加到容器。这在旧样式的片段和活动中很好地工作。但是,它在导航体系结构组件中不起作用,因为根容器是一个FragmentContainerView,只允许将片段附加到其中。

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


8
在连接视图之前,Fragment会执行一些操作,因此即使不使用FragmentContainerView,在那里使用“true”会破坏许多东西,这只是其中最明显的一个。 - ianhanniballake
5
如果在布局填充时没有指定attachToRoot参数,似乎会出现问题。 这样修复它-> inflater.inflate(R.layout.fragment_my_fragment, container, false) - display name

1

只需替换您的onViewCreated方法。

class MyFragment : Fragment() {
    override fun onCreateView(  inflater: LayoutInflater,container: ViewGroup?,  savedInstanceState: Bundle?
    ): View? {
        return inflater.inflate(R.layout.fragment_post,container,false) 
    }
} 

1
补充一下这个答案,重要的部分是将false值作为第三个参数传递给inflate()方法。添加这个布尔值可以解决问题。 - Mickäel A.

1
如果您正在使用 lifeCycleScope,请确保至少在 Lifecycle.State.STARTED 状态下启动和运行该块。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接