Android 使用嵌套约束布局的多视图单击事件(2.0.0 beta 2)

Android 使用嵌套约束布局的多视图单击事件(2.0.0 beta 2),android,performance,kotlin,android-constraintlayout,android-motionlayout,Android,Performance,Kotlin,Android Constraintlayout,Android Motionlayout,我已经使用ConstraintLayout创建了布局,而ConstraintLayout允许您构建复杂布局,而无需嵌套视图。在我的例子中,我需要多个视图单击事件 我尝试过使用组,因为您可以在代码中获得属于组成员的ID列表,并设置click listener fun Group.setAllOnClickListener(listener: View.OnClickListener?) { referencedIds.forEach { id ->

我已经使用
ConstraintLayout
创建了布局,而
ConstraintLayout
允许您构建复杂布局,而无需嵌套视图。在我的例子中,我需要多个视图单击事件

我尝试过使用
,因为您可以在代码中获得属于
成员的ID列表,并设置click listener

 fun Group.setAllOnClickListener(listener: View.OnClickListener?) {
            referencedIds.forEach { id ->
                rootView.findViewById<View>(id).setOnClickListener(listener)
            }
        }
fun Group.setAllOnClickListener(监听器:View.OnClickListener?){
referencedIds.forEach{id->
rootView.findViewById(id).setOnClickListener(listener)
}
}
但是,从
ConstraintLayout
版本
2.0.0-beta2
开始,这似乎不起作用。此代码一直工作到
2.0.0-alpha3
。我已经使用多个
ConstraintLayout
实现了,所以可以使用嵌套约束布局吗


我正在使用
MotionLayout
和约束布局的其他动画,因此我不能使用较低版本的
ConstraintLayout
组的引用ID可用时发生了更改。在2.0.0-beta2之前的版本中,它们可以在
onCreate()
中立即使用。似乎对于2.0.0-beta2,它们只能用于后期布局。我不确定这是否有记录,或者这是否只是一个副作用

以下内容在2.0.0-beta2中适用:

class MainActivity:AppCompatActivity(){
fun Group.setAllOnClickListener(监听器:View.OnClickListener?){
referencedIds.forEach{id->
rootView.findViewById(id).setOnClickListener(listener)
}
}
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//引用的ID在此不可用,但在布局后可用。
布局{
setAllOnClickListener(对象:View.OnClickListener{
覆盖趣味onClick(v:视图){
val text=(v作为按钮)。text
Toast.makeText(this@MainActivity,文本,Toast.LENGTH\u SHORT.show()
}
})
}
}
}

谢谢。这绝对适用于2.0.0-beta2
class MainActivity : AppCompatActivity() {
    fun Group.setAllOnClickListener(listener: View.OnClickListener?) {
        referencedIds.forEach { id ->
            rootView.findViewById<View>(id).setOnClickListener(listener)
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Referenced ids are not available here but become available post-layout.
        layout.post {
            group.setAllOnClickListener(object : View.OnClickListener {
                override fun onClick(v: View) {
                    val text = (v as Button).text
                    Toast.makeText(this@MainActivity, text, Toast.LENGTH_SHORT).show()
                }
            })
        }
    }
}