未找到Android绑定适配器

nbnkbykc  于 2023-02-02  发布在  Android
关注(0)|答案(3)|浏览(146)

请有人帮帮我!我快疯了,这应该工作。我有以下错误消息,当我试图建立我的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属性。我在xml中使用errorText属性的方式是(full xml here):

<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>

这是我在Kotlin文件(full file here)中定义errorText的方式:

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

我只是不明白为什么会发生这种情况。我是否可以在布局文件中添加某种导入,以说明BindingAdapter的位置?我的Gradle文件是否存在问题?我将其与this question中的GitHub项目进行了比较,该项目显然已得到解决,但我看不出与我的项目有何不同。根据答案,我应该将Kotlin-kapt插件添加到我的Gradle构建版本中,我照做了。我还浏览了项目的其余部分并进行了比较。无济于事。你可以找到我的整个build.gradle file here以及项目的其余部分。
请救救我!

dxxyhpgq

dxxyhpgq1#

这个问题与将String值传递给app:errorText的方式有关。
使用@{''}传递此值。
修复了fragment_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}">

必须在app/build.gradle中包含apply plugin: 'kotlin-kapt'

9ceoxa92

9ceoxa922#

尝试使用

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

brtdzjyr3#

另一个不常讨论的原因是你需要把你的布局放在“”标签里面,否则数据绑定就不起作用了。

相关问题