¡Por favor, que alguien me ayude! Me estoy volviendo loco, esto debería funcionar. Tengo el siguiente mensaje de error cuando intento construir mi proyecto de 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.
el mensaje de error menciona el atributo errorText. Uso el atributo errorText en el xml de esta manera ( xml completo aquí ):
<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>
Esta es la forma en que he definido errorText en mi archivo Kotlin (archivo completo aquí ):
object ViewDataBindingExtensions { @JvmStatic @BindingAdapter("errorText") fun bindErrorText(textInputLayout: TextInputLayout, errorText: String) { textInputLayout.error = errorText } }
Simplemente no entiendo por qué sucede esto. ¿Hay algún tipo de importación que pueda poner en el archivo de diseño que diga dónde está BindingAdapter? ¿Tengo algún problema con mis archivos Gradle? Lo comparé con el proyecto GitHub en esta pregunta que aparentemente se resolvió y no veo la diferencia con mi proyecto. De acuerdo con la respuesta, debería agregar el complemento Kotlin-kapt a mi compilación de Gradle, lo cual hice. También revisé el resto del proyecto y lo comparé. En vano. Puede encontrar todo mi archivo build.gradle aquí , así como el resto del proyecto.
¡Por favor, ayúdame!
El problema está relacionado con la forma en que pasa el valor de String a app:errorText
.
Use @{``} para pasar este valor.
Parte fija de 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}">
Es obligatorio apply plugin: 'kotlin-kapt'
en app/build.gradle
.
Intenta usar
fun bindErrorText(textInputEditText: TextInputEditText, errorText: String) { textInputEditText.error = errorText }