Связывающий адаптер Android не найден - PullRequest
0 голосов
/ 26 февраля 2019

Пожалуйста, кто-нибудь, помогите мне!Я схожу с ума, это должно работать.У меня появляется следующее сообщение об ошибке при попытке создать мой проект Android:

Android resource linking failed
/Users/slehrbaum/StudioProjects/OneNightComps/Android/app/build/intermediates/incremental/mergeDebugResources/stripped.dir/layout/fragment_login.xml:17: error: attribute errorText (aka lehrbaum.de.onenightcomps:errorText) not found.
error: failed linking file resources.

в сообщении об ошибке упоминается атрибут errorText.Я использую атрибут errorText в xml следующим образом ( полный xml здесь ):

<com.google.android.material.textfield.TextInputLayout
        android:id="@+id/usernameField"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/username"
        app:hintEnabled="true"
        app:errorEnabled="true"
        app:errorText="Hi"
        >
        <!--app:errorText="Please provide a username."-->
        <com.google.android.material.textfield.TextInputEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:autofillHints="username"
            android:inputType="text"
            android:text="@={viewModel.username}"
            />
    </com.google.android.material.textfield.TextInputLayout>

Так я определил errorText в моем файле Kotlin ( полный файл здесь):

object ViewDataBindingExtensions {
    @JvmStatic
    @BindingAdapter("errorText")
    fun bindErrorText(textInputLayout: TextInputLayout, errorText: String) {
        textInputLayout.error = errorText
    }
}

Я просто не понимаю, почему это происходит.Есть ли какой-то импорт, который я могу поместить в файл макета, где указано, где находится BindingAdapter?У меня что-то не так с файлами Gradle?Я сравнил его с проектом GitHub в этом вопросе , который, по-видимому, был решен, и я не вижу разницы с моим проектом.В соответствии с ответом я должен добавить плагин Kotlin-kapt к моей сборке Gradle, что я и сделал.Я также просмотрел остальную часть проекта и сравнил.Но безрезультатно.Вы можете найти весь мой файл build.gradle , а также остальную часть проекта.

Пожалуйста, помогите мне!

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Проблема связана с тем, как вы передаете строковое значение в app:errorText.

Используйте @ {``} для передачи этого значения.

Фиксированная часть frag_login.xml:

<com.google.android.material.textfield.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/username"
    app:hintEnabled="true"
    app:errorText="@{`Please provide a username.`}"
    app:errorEnabled="@{!viewModel.usernameValid}">

Наличие apply plugin: 'kotlin-kapt' в app/build.gradle является обязательным.

0 голосов
/ 26 февраля 2019

Попробуйте использовать

fun bindErrorText(textInputEditText: TextInputEditText, errorText: String) {
 textInputEditText.error = errorText }
...