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()
}
})
}
}
}