2016-04-30 12 views
3
nicht lösen

Ich spiele mit der Zwei-Wege-Bindung der Datenbindung API, die in Android Studio 2.1 AFIK eingeführt wurde.Zwei-Wege-Bindung kann einen Setter für java.lang.String -Eigenschaft

ich diesen interessanten Fehler:

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

Wenn ich versuche, diesen Fehler zu google finde ich nur 4 Tage alten japanische Twitter Posting von einem Mann, der über sie weint ...

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

Das address.zip ist ein String. Ich vermute, dass das Problem hier CharSequence vs String als Rückgabewert von EditText.getText() ist.

Meine Idee war, zu definieren, es aber nicht für mich arbeiten:

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

Was habe ich verpasst?

Antwort

4

Dieser Fehler ist hässlich und richtigerweise ein Fehler in der Datenbindungs-API. Die Lösung besteht darin, einen Setzer und einen Getter zu erzeugen. Ich bin schnell auf die Idee gekommen, einen Setter zu erstellen, aber keinen Getter zu kreieren.

Hier ist nun mein vereinfachtes Modell:

public class Address { 
    public String street; 

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

    public String getStreet() { 
     return street; 
    } 
} 

Wie Sie die Getter und Setter sind nutzlos, kann zu beachten, sondern auch für Zwei-Wege-Bindung erforderlich.

Wenn Sie denken, dass dies ein Fehler der API ist bitte meinen Bug-Report Star: Two-way binding required setters AND ALSO getters

0

Nach https://android.googlesource.com/platform/frameworks/data-binding/ Nachricht begeht offical Repo-Datenbindung, dieser Fehler wurde bei Android Studio 2.2 Vorschau fixiert 3.

+0

Kannst du das Commit, von dem du sprichst, verlinken? Ich sehe dort nur ein Commit, das vor 8 Wochen gepusht wurde, was nicht zusammenhängt. – rekire

+0

Meinst du das commit [0137f2] (https://android.googlesource.com/platform/frameworks/data-binding/+/0137f239576702ac3ef4dd887b445d71f35169dd)? – rekire

+0

Ja, und ich habe auch auf verschiedenen Versionen von Android Studio getestet. –