我正在尝试将两个片段添加到“约束布局”中,然后设置它们的约束,以确保较低的片段始终对齐到应用程序布局的底部,而较高的片段可以填充任何剩余的空间。我执行此操作的代码如下:
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中的约束布局中添加框架布局,然后向其中添加片段,但这听起来像是一种解决方法,所以我怀疑我缺少了一些东西。
答案 0 :(得分:1)
您为set.connect(…)
使用了错误的ID。 Fragment具有View,如果要将其传递到connect(…)
,则需要该View ID。这对我来说太复杂了,因为您将需要等到Fragment生命周期开始(fragmentTransaction.commit()
是异步的)。我不知道commitNow()
是否可以为您提供帮助。
我可以在xml中的约束布局中添加框架布局
如果我是你,我会采用这种方法。这样,布局将保留在XML中,并且仅以编程方式将片段添加到其占位符(并处理其生命周期和事件传播)。