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

Multiple view click events using nested constraint layout (2.0.0 beta 2)

我已经使用 ConstraintLayout 创建了我的布局,因为 ConstraintLayout 允许您构建复杂的布局而无需嵌套视图。就我而言,我想要多个视图点击事件。

我已经尝试使用 Group,因为您可以在代码中获取作为 Group 成员的 ID 列表,并设置点击侦听器。

 fun Group.setAllOnClickListener(listener: View.OnClickListener?) {
            referencedIds.forEach { id ->
                rootView.findViewById<View>(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,它们仅可用 post-layout。我不确定这是否被记录在案或者它是否只是一个 side-effect.

以下内容适用于 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()
                }
            })
        }
    }
}