Использовать группу в ConstraintLayout для прослушивания событий кликов на нескольких представлениях

В основном я хотел бы приложить один OnClickListener к нескольким представлениям внутри ConstraintLayout.

Перед переходом на ConstraintLayout просмотры, где внутри одного макета, на который я мог бы добавить слушателя. Теперь они находятся на одном уровне с другими видами прямо под ConstraintLayout.

Я попробовал добавить представления в группу android.support.constraint.Group и программно добавить к ней OnClickListener.

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

Однако это не похоже на версию ConstraintLayout версии 1.1.0-beta2

Я сделал что-то неправильно, есть ли способ достичь такого поведения или мне нужно приложить слушателя к каждому из отдельных представлений?

Group в ConstraintLayout – это просто свободная ассоциация взглядов AFAIK. Это не ViewGroup , поэтому вы не сможете использовать ни одного прослушивателя кликов, как вы делали это при просмотре представлений в ViewGroup .

В качестве альтернативы вы можете получить список идентификаторов, которые являются членами вашей Group в вашем коде и явно установить прослушиватель кликов. (Я не нашел официальную документацию по этой функции, но я считаю, что она просто отстает от выпуска кода.)

Ява:

  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. } }); } 

Поскольку это может быть функция, которая может быть полезна чаще всего в Котлине, вы можете построить для нее функцию расширения.

Котлин:

  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) 
Intereting Posts
Как использовать неизменяемые постоянные коллекции в Котлине? Котлин. Какой способ инициализации прав? Завершить деятельность андроида от другого с помощью Kotlin BottomNavigationView ссылку на ViewPager, когда я установил Listener в bottomNavigationView, мне нужно дважды щелкнуть, чтобы выполнить то, что я делаю java.lang.NoClassDefFoundError: com.example.api.retrofit.AuthenticationInterceptor $ перехват $ 1 Kapt + LoganSquare не работает должным образом при сопоставлении Получение сигнала Fata 11 при попытке использования Observable Как получить необязательный <String> из String? и Строка в Котлине ViewModel for Fragment вместо доступа к Activity ViewModel? Как создать фиксированный размер IntArray и инициализировать массив позже в Котлин? JUnit, @ControllerAdvice и отсутствие проверенных исключений в Kotlin null или empty lambda в качестве значения по умолчанию Как заставить компилятор Kotlin рассматривать предупреждения как ошибки? Как получить номер мобильного телефона с SIM-карты в Android Программно с использованием языка kotlin? Зависимость между Maven и Kotlin не приводит к классам Котлина