У меня есть файл макета, определяющий RadioGroup
, содержащий девять RadioButton
с. Этот файл макета включен в макет фрагмента несколько раз.
Для каждого включения макета RadioGroup
я хотел бы каким-либо образом привязать индекс выбранной RadioButton
к другой переменной MutableLiveData<Integer>
в фрагменте ViewModel
, каждая из которых представляет выбранная пользователем оценка по девятибалльной шкале.
Привязка данных настроена правильно и работает для других частей (например, привязка обработчиков щелчков и просмотр видимости для MutableLiveData<Boolean>
).
То, что я до сих пор пытался сделать, это передать мою ViewModel
переменную и / или отдельные MutableLiveData<Integer>
переменные во включенный макет через
...
<data>
<variable name="viewModel" type="my.package.MyViewModel"/>
<variable name="someVariable" type="androidx.lifecycle.LiveData<Integer>"/>
</data>
...
<include layout="@layout/radiobuttons"
app:viewModel="@{viewModel}"
app:someVariable="@{someVariable}"/>
и используя те же объявления переменных внутри макета RadioGroup
, чтобы иметь возможность использовать их там. Затем я попытался привязать атрибут RadioGroup
android:onItemSelected
, используя
android:onItemSelected="@{(parent, view, position, id) -> someVariable.setValue(position)}"
, приводящее к ошибке привязки данных: «Не удается найти установщик для атрибута« android: onItemSelected »с типом параметра lambda на android.widget.RadioGroup»
или добавление следующего к RadioButton
s
android:onClick="@{(view) -> viewModel.updateRadioButtonSelection(someVariable, /*INDEX HERE e.g.*/ 0)}"
, но это приводит к ошибке привязки данных: «не удается найти метод updateRadioButtonSelection (java.lang.Integer, int) в классе my.package.MyViewModel», что означает, что MutableLiveData<Integer>
не передается как таковой, но он содержит тип (У меня есть метод public void updateRadioButtonSelection(MutableLiveData<Integer> variable, int value)
в классе ViewModel).
Могу ли я указать - в макете - привязка, из которой RadioButton
была выбрана для переменной int без какого-либо обходного пути, включая дополнительный код и перевод RadioButton
идентификаторов в индекс? Односторонней привязки будет достаточно - изменение переменных ViewModel из кода не предназначено.