skip to Main Content

I am playing with the two-way binding of the data binding API which was introduced in Android Studio 2.1 AFIK.

I get this interesting error:

Error:Execution failed for task ‘:app:compileDebugJavaWithJavac’.
> java.lang.RuntimeException: Found data binding errors.
****/ data binding error ****msg:The expression address.street cannot cannot be inverted: Two-way binding cannot resolve a setter for java.lang.String property ‘street’
file:/path/to/layout.xml
loc:34:37 – 34:50
**** data binding error ****

When I try to google that error I just find a 4 day old Japanese Twitter posting from a guy who is crying about it…

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/edit_hint_zip"
    android:text="@={address.zip}"
    tools:text="12345"/>

That address.zip is a String. I am guessing that the problem here is CharSequence vs. String as the return value of EditText.getText().

My idea was to defining it however this does not work for me:

@NonNull
@InverseBindingAdapter(attribute = "text")
public static String getText(EditText edit) {
    return edit.getText().toString();
}

What did I miss?

3

Answers


  1. Chosen as BEST ANSWER

    This bug is ugly as hell and properly a bug in the data binding API. The solution is to generate a setter and a getter. I came up fast with the idea to create a setter, but not to create a getter.

    Here is now my simplified model:

    public class Address {
        public String street;
    
        public void setStreet(String street) {
            this.street = street;
        }
    
        public String getStreet() {
            return street;
        }
    }
    

    As you may note the getter and setter are useless, but required for two way binding.

    If you think that this is a bug of the API please star my bug report: Two-way binding required setters AND ALSO getters


  2. According to databinding offical repo https://android.googlesource.com/platform/frameworks/data-binding/ commit message, this bug has been fixed at Android Studio 2.2 preview 3.

    Login or Signup to reply.
  3. If you are working with kotlin , make sure data class field used for two way binding is declared as var. If it is val unable to support two way binding

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search