在ConstraintLayout中使用组来侦听多个视图上的点击事件

基本上我想在一个ConstraintLayout中附加一个OnClickListener到多个视图。

在迁移到ConstraintLayout之前,我可以添加一个侦听器的布局内的视图。 现在,它们与ConstraintLayout下的其他视图位于同一图层上。

我试图将视图添加到android.support.constraint.Group并以编程方式添加一个OnClickListener。

 group.setOnClickListener { Log.d("OnClick", "groupClickListener triggered") } 

然而,这似乎并不像ConstraintLayout版本1.1.0-beta2

我做错了什么,有没有一种方法来实现这种行为,或者我需要将侦听器附加到每个单个视图?

ConstraintLayoutGroup只是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)