Не работают листенеры после обновления Android Studio
Всем привет! Возобновил работу над старым проектом, работавшим в версии Android Studio 21-го года (Bumblebee). После обновления до текущей версии (Giraffe) обнаружилось, что некоторые листенеры не срабатывают. Особенность несрабатывающих листенеров в том, что разметка, на к-рой находятся кликаемые View, подключается в главную разметку через include. Текст проекта великоват, приведу самые значимые моменты:
Главная разметка, файл power_unit_fragment.xml:
<androidx.constraintlayout.widget.ConstraintLayout
....
<FrameLayout
android:id="@+id/powerunit_ControlFrame"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:layout_marginTop="20dp"
app:layout_constraintStart_toStartOf="@id/powerunit_infoFrame"
app:layout_constraintTop_toBottomOf="@id/powerunit_infoFrame">
<include layout="@layout/powerunit_control" />
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
Разметка с кликаемыми элементами, файл powerunit_control.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
...
<Button
android:id="@+id/emStop"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="4dp"
android:focusable="true"
android:textStyle="bold"
android:clickable="true"
android:textColor="@color/button_text_color"
app:backgroundTint="@color/green_red_button_color"
android:text="E.Stop on"
/>
</LinearLayout>
В onCreateView фрагмента, где используется биндинг и листенеры:
powerUnitFragmentBinding = PowerUnitFragmentBinding.inflate(inflater, container, false) //биндинг "главного" окна
powerunitControlBinding = PowerunitControlBinding.inflate(inflater, container, false) // биндинг подключенного includ-ом окошка с кнопкой
//листенер кнопки
powerunitControlBinding.emStop.setOnClickListener {
....
}
//onCreateView завершается возвратом
return powerUnitFragmentBinding.root //что вроде бы правильно
Так вот, листенер устанавливается, но не срабатывает никогда. Что можно предположить?
Ответы (1 шт):
В общем, верно подозревал, что причина была в подключении разметки. Все заработало после нижеописанных изменений. При подключении разметки через include добавил идентификатор подключаемого файла:
<include
android:id="@+id/powerunit_ControlFrame"
layout="@layout/powerunit_control" />
Биндинг:
binding = PowerUnitFragmentBinding.inflate(inflater, container, false) //биндинг "корневой" разметки
powerunitControlBinding = binding.powerunitControlFrame //используется добавленный id
Листенер остался без изменений. В общем, есть какой-то нюанс во взаимоотношениях view binding и составной разметки.