2016-04-30 1 views
3

Je joue avec la liaison bidirectionnelle de l'API de liaison de données introduite dans Android Studio 2.1 AFIK.La liaison bidirectionnelle ne peut pas résoudre un setter pour la propriété java.lang.String

Je reçois cette erreur intéressante:

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

Lorsque je tente de Google cette erreur je trouve juste un affichage japonais ancien Twitter 4 jours d'un gars qui est en train de pleurer à son sujet ...

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

Que address.zip est un String. Je devine que le problème ici est CharSequence contre String comme valeur de retour de EditText.getText().

Mon idée était de définir mais cela ne fonctionne pas pour moi:

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

Qu'est-ce que je manque?

Répondre

4

Ce bug est laid comme un diable et correctement un bogue dans l'API de liaison de données. La solution consiste à générer un setter et un getter. Je suis venu rapidement avec l'idée de créer un setter, mais pas pour créer un getter.

Voici maintenant mon modèle simplifié:

public class Address { 
    public String street; 

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

    public String getStreet() { 
     return street; 
    } 
} 

Comme vous pouvez le noter getter et setter sont inutiles, mais nécessaires pour les deux sens de liaison.

Si vous pensez que cela est un bug de l'API s'il vous plaît étoile mon rapport de bogue: Two-way binding required setters AND ALSO getters

0

Selon databinding repo offical https://android.googlesource.com/platform/frameworks/data-binding/ message de commit, ce bug a été corrigé dans Android studio 2.2 Aperçu 3.

+0

Pouvez-vous lier le commit dont vous parlez? Je vois là juste un engagement qui a été poussé il y a 8 semaines, ce qui ne semble pas être lié. – rekire

+0

Voulez-vous dire le commit [0137f2] (https://android.googlesource.com/platform/frameworks/data-binding/+/0137f239576702ac3ef4dd887b445d71f35169dd)? – rekire

+0

Oui, et j'ai également testé sur différentes versions d'Android Studio. –