在ConstraintLayout中使用组来侦听多个视图上的点击事件
基本上我想在一个ConstraintLayout中附加一个OnClickListener到多个视图。
在迁移到ConstraintLayout之前,我可以添加一个侦听器的布局内的视图。 现在,它们与ConstraintLayout下的其他视图位于同一图层上。
我试图将视图添加到android.support.constraint.Group
并以编程方式添加一个OnClickListener。
group.setOnClickListener { Log.d("OnClick", "groupClickListener triggered") }
然而,这似乎并不像ConstraintLayout版本1.1.0-beta2
我做错了什么,有没有一种方法来实现这种行为,或者我需要将侦听器附加到每个单个视图?
ConstraintLayout
的Group
只是AFAIK观点的松散关联。 它不是一个ViewGroup
,所以你不能像使用ViewGroup
的视图一样使用单击监听器。
或者,您可以在代码中获得属于您的Group
成员的ID列表,并明确设置点击侦听器。 (我还没有找到关于这个功能的官方文档,但是我相信它只是落后于代码发布。)
Java的:
Group group = findViewById(R.id.group); int refIds[] = group.getReferencedIds(); for (int id : refIds) { findViewById(id).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // your code here. } }); }
由于这可能是Kotlin中更经常使用的功能,因此您可以为此构建扩展功能。
科特林:
fun Group.addOnClickListener(listener: View.OnClickListener?) { referencedIds.forEach { id -> rootView.findViewById<View>(id).setOnClickListener(listener) } } ... // then call the function on the group group.addOnClickListener(listener)