Android 以编程方式向约束布局添加片段

Android 以编程方式向约束布局添加片段,android,user-interface,kotlin,Android,User Interface,Kotlin,我试图向约束布局添加两个片段,然后设置它们的约束,以确保下部片段始终捕捉到应用程序布局的底部,上部片段可以填充任何剩余空间。我的代码如下所示: val fragmentTransaction = fragmentManager.beginTransaction() fragmentTransaction.add(R.id.app_con_layout,fragmentA) fragmentTransaction.add(R.id.app_con_l

我试图向约束布局添加两个片段,然后设置它们的约束,以确保下部片段始终捕捉到应用程序布局的底部,上部片段可以填充任何剩余空间。我的代码如下所示:

        val fragmentTransaction = fragmentManager.beginTransaction()
        fragmentTransaction.add(R.id.app_con_layout,fragmentA)
        fragmentTransaction.add(R.id.app_con_layout,fragmentB)
        fragmentTransaction.commit()

        val mConstraintLayout = findViewById<ConstraintLayout>(R.id.app_con_layout)
        val set = ConstraintSet()

        set.clone(mConstraintLayout)
        set.connect(fragmentA.id, ConstraintSet.TOP, R.id.app_toolbar, ConstraintSet.BOTTOM)
        set.connect(fragmentB.id, ConstraintSet.BOTTOM, mConstraintLayout.id, ConstraintSet.BOTTOM)
        set.applyTo(mConstraintLayout)
这不起作用,这两个碎片似乎最终彼此重叠。我的理解是,片段不会获得唯一的ID,相反,我应该使用标记作为片段事务的一部分,以便以后能够唯一地引用片段。但这似乎与ConstraintSet的connect方法不兼容,后者需要一个整数id


解决这个问题的正确方法是什么?我可以将框架布局添加到xml格式的约束布局中,然后将片段添加到这些布局中,但这感觉像是一种解决方法,因此我怀疑我遗漏了一些内容。

您对set使用了错误的ID。connect…。片段具有视图,如果要将其传递到connect…,则需要该视图ID…。这对我来说太复杂了,因为您需要等待片段生命周期开始fragmentTransaction.commit是异步的。我不知道commitNow是否能帮到你

我可以用xml将框架布局添加到约束布局中


如果我是你,我会采取这种方法。这样,布局就保持在XML中,只需将片段添加到它们的占位符中,并以编程方式处理它们的生命周期和事件传播。

如果将这两个片段添加到同一个容器中,最终结果会是什么?@abstractArrow如果我不理解您的意思,我深表歉意,但就我所知,在一个布局组件中添加多个片段是完全有效的——我过去用线性布局做过,没有问题。