使用嵌套约束布局的多视图点击事件(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()
}
})
}
}
}
我已经使用 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()
}
})
}
}
}