Как сравнить строки в файле XML с помощью привязки данных

Как можно сравнить значение поля моего объекта String с другим значением String в файле XML с помощью привязки данных? Можно ли сделать это в файле XML или я должен создать метод где-то в моем проекте с @BindingAdapter аннотаций? Ниже то, что я пробовал до сих пор, и это не сработало. Было бы также хорошо сравнить со значением ресурса String, а не со значением строки в жестком коде.

<RadioGroup
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <RadioButton
                android:id="@+id/male"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:checked="@{user.gender.equalsIgnoreCase("male")}"
                android:text="@string/male"/>

            <RadioButton
                android:id="@+id/female"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:checked="@{user.gender.equalsIgnoreCase("female")}"
                android:text="@string/female"/>

        </RadioGroup>

Спасибо за помощь.

1 ответ

Решение

У вас это почти правильно. Строковые константы не могут использовать двойные кавычки в двойных кавычках в XML, поэтому привязка данных Android поддерживает использование обратных кавычек в выражении:

        <RadioButton
            android:id="@+id/male"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:checked="@{user.gender.equalsIgnoreCase(`male`)}"
            android:text="@string/male"/>

Это позволяет смешивать символьные константы с одинарными кавычками и строковыми константами.

XML также позволяет использовать одинарные кавычки для значений атрибутов, поэтому вы можете использовать двойные кавычки в выражении. Это более распространенный подход:

        <RadioButton
            android:id="@+id/female"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:checked='@{user.gender.equalsIgnoreCase("female")}'
            android:text="@string/female"/>

Вы можете пропустить все это и использовать строковые ресурсы или константы:

        <RadioButton
            android:id="@+id/male"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:checked="@{user.gender.equalsIgnoreCase(@string/male)}"
            android:text="@string/male"/>

        <RadioButton
            android:id="@+id/female"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:checked="@{user.gender.equalsIgnoreCase(StringConstants.FEMALE)}"
            android:text="@string/female"/>
Другие вопросы по тегам