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?
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
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With