ARTICLE AD BOX
I was working on an XML + DataBinding Android project, but builds were failing with errors.
I have reproduced the problem in the following simple sample:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"> <data> <variable name="myName" type="String" /> </data> <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" app:myOwnText="@{myName}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> </layout>MainActivity.kt
package com.example.databindingdemo import android.os.Bundle import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity import com.example.databindingdemo.databinding.ActivityMainBinding class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) binding.myName = "Abhinav" } }BindingAdapters.kt
package com.example.databindingdemo import android.widget.TextView import androidx.databinding.BindingAdapter object BindingAdapters { @JvmStatic @BindingAdapter("myOwnText") fun setMyOwnText(view: TextView, value: String?) { view.text = value ?: "User" } }Error logs:
Caused by: android.databinding.tool.util.LoggedErrorException: Found data binding error(s): [databinding] {"msg":"Cannot find a setter for \u003candroid.widget.TextView app:myOwnText\u003e that accepts parameter type \u0027java.lang.String\u0027\n\nIf a binding adapter provides the setter, check that the adapter is annotated correctly and that the parameter type matches.","file":"app\\src\\main\\res\\layout\\activity_main.xml","pos":[{"line0":20,"col0":29,"line1":20,"col1":34}]}Notes:
The BindingAdapters.kt file resides in the root folder (alongside MainActivity.kt)
Data Binding is enabled in build.gradle.kts
AGP version is 9.0.0
I get the warning "Function "setMyOwnText" is never used" in Android Studio, even though I am using this adapter inside my TextView in activity_main
