Создание специального адаптера привязки для привязки данных - PullRequest
0 голосов
/ 02 июля 2018

Я получаю веб-сервис профиля, в котором я получаю пол как 1- Мужской 2- Женский и 3- Не предпочитаемый (Ссылочный). Веб-сервис дает мне значение как 1, 2, 3 .

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

Вот пользовательский код Binder

 @BindingAdapter({"android:gender"})
    public static String loadGender(Integer genderCode) {
        if (genderCode == 1) {
            return "Male";
        } else if (genderCode == 2) {
            return "Female";
        } else if (genderCode == 3) {
            return "Not Preferred";
        }
        return null;
    }

и из XML я принимаю Android: пол = @ {userProfile.xxxx}

Но я не получаю конвертированное значение


FAILURE: сборка не удалась, исключение.

  • Что пошло не так: Не удалось выполнить задачу ': app: compileDebugJavaWithJavac'.

    android.databinding.tool.util.LoggedErrorException: обнаружены ошибки привязки данных. **** / ошибка связывания данных. Файл: D: \ AndroidProjects \ НМА \ hma_1.0_ankit \ HMA-Android \ HmaApplication \ приложение \ SRC \ главная \ Рез \ расположение \ fragment_profile_user.xml loc: 136: 42 - 136: 67 **** \ ошибка привязки данных ****

  • Попробуйте: Запустите с параметром --stacktrace, чтобы получить трассировку стека. Запустите с параметром --info или --debug, чтобы получить больше вывода журнала. Запустите с --scan, чтобы получить полную информацию.

  • Получите дополнительную помощь по https://help.gradle.org

СТРОИТЬ ОШИБКА в 1с 19 действенных задач: 4 выполненных, 15 актуальных


Может кто-нибудь, пожалуйста, дайте мне знать, почему я не прав

1 Ответ

0 голосов
/ 02 июля 2018

Вы не можете вернуть значение из Binding Adapter, вам лучше делать то, что вы хотите внутри Binding Adapter. Ваш метод должен быть:

    @BindingAdapter("android:gender")
    public static void loadGender(TextInputEditText textInputEditText, int genderCode) {
        String gender = null;
        if (genderCode == 1) {
            gender = "Male";
        } else if (genderCode == 2) {
            gender = "Female";
        } else if (genderCode == 3) {
            gender = "Not Preferred";
        }

        textInputEditText.setText(gender);
    }

Привязка данных автоматически передается в TextInputEditText, где вы использовали свой атрибут android:gender.

Кроме того, вы должны использовать свой атрибут следующим образом:

android:gender="@{userProfile.xxxx}" ( Примечание кавычки вокруг @ {} )

Предлагаемое улучшение : поскольку вы не переопределяете собственный атрибут Android (android:gender обычно не является атрибутом в представлениях), я бы рекомендовал вам назвать свой атрибут «пол». Таким образом, вы определяете свой Binding Adapter с @BindingAdapter("gender") и ссылаетесь на свой атрибут в XML как app:gender="@{userProfile.xxxx}"

...