2016-04-30 93 views
3

我正在玩Android Studio 2.1 AFIK中引入的數據綁定API的雙向綁定。雙向綁定無法解析java.lang.String屬性的setter

我得到這個有趣的錯誤:

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

當我嘗試谷歌的錯誤我只是找到誰在哭它一個人4天的日本Twitter的帖子...

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

address.zipString。我猜測這裏的問題是CharSequenceString作爲EditText.getText()的返回值。

我的想法是將其定義然而,這並沒有爲我工作:

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

我錯過了什麼?

回答

4

這個錯誤是醜陋的,正確的數據綁定API中的錯誤。解決方案是生成一個setter 和一個getter。我想出了創建一個二傳手的想法,但不想創造一個吸氣器。

現在這裏是我的簡化模型:

public class Address { 
    public String street; 

    public void setStreet(String street) { 
     this.street = street; 
    } 

    public String getStreet() { 
     return street; 
    } 
} 

正如你可能注意到的getter和setter是無用的,但對於雙向結合所需。

如果你認爲這是API的一個bug,請明星我的錯誤報告:Two-way binding required setters AND ALSO getters

0

據官方數據綁定回購https://android.googlesource.com/platform/frameworks/data-binding/提交信息,這個錯誤已被固定在Android Studio中2.2預覽3.

+0

你能鏈接你正在談論的提交嗎?我在那裏看到只有一個在8周前推出的提交,這似乎沒有關係。 – rekire

+0

你的意思是提交[0137f2](https://android.googlesource.com/platform/frameworks/data-binding/+/0137f239576702ac3ef4dd887b445d71f35169dd)? – rekire

+0

是的,我也在不同版本的Android Studio上測試過。 –