6

Sto guardando il nuovo plug-in Data Binding per Android e sto provando ad integrarlo in un progetto.Impossibile fare riferimento ai campi Classe osservabile dal layout xml

Durante la lettura sulla creazione di oggetti osservabili, ho incontrato la documentazione ObservableFields che comporta l'uso di self-contained oggetti osservabili esempio dalla documentazione:

public class User extends BaseObservable { 
    public final ObservableField<String> firstName = 
     new ObservableField<>(); 
    public final ObservableField<String> lastName = 
     new ObservableField<>(); 
    public final ObservableInt age = new ObservableInt(); 
} 

Sopra frammento sarebbe una sostituzione:

private static class User extends BaseObservable { 
    private String firstName; 
    private String lastName; 
    @Bindable 
    public String getFirstName() { 
     return this.firstName; 
    } 
    @Bindable 
    public String getFirstName() { 
     return this.lastName; 
    } 
    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
     notifyPropertyChanged(BR.firstName); 
    } 
    public void setLastName(String lastName) { 
     this.lastName = lastName; 
     notifyPropertyChanged(BR.lastName); 
    } 
} 

Quale è significativamente meno codice; Ma quando si utilizzano campi osservabile e di riferimento poi dal layout XML come ad esempio:

<layout xmlns:android="http://schemas.android.com/apk/res/android"> 
    <data> 
     <variable name="user" type="com.example.User"/> 
    </data> 
    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <TextView android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@{user.lastName}" 
      android:id="@+id/lastName"/> 

    </LinearLayout> 
</layout> 

sto ottenendo questo errore:

../../databinding/ActivityMainBinding.java 
Error:(127, 20) error: cannot find symbol variable lastName 

E non è prolisso a tutti; Non usare ObservableFields funziona come un incantesimo.

Documentation reference

Chiunque di fronte a questo problema? Pensieri?

+0

Invia l'xml per il layout per favore? – fakataha

+0

@atamakosi qui andiamo! –

+0

Nel primo caso dobbiamo aggiungere "BaseObservable"? – Debanjan

risposta

5

Questo appare come un bug da parte nostra. Ho sentito che aggiungere @Bindable risolve il problema ma il collegamento dei dati dovrebbe essere in grado di trovarlo senza un'annotazione Bindable. Ho creato un bug internamente, grazie.

+3

Grazie per quello. Forse vale la pena di aggiornare la documentazione con bindable per il momento? Cheers –

+1

fyi, la correzione verrà rilasciata in rc1 – yigit

1

ObservableField deve essere annotato con l'annotazione @Bindable da compilare.

la sorgente per l'annotazione stati Bindable:

this is necessary for java analyzer to work

così finisce per assomigliare a questo:

public class User extends BaseObservable { 
    @Bindable 
    public final ObservableField<String> firstName = 
     new ObservableField<>(); 
    @Bindable 
    public final ObservableField<String> lastName = 
     new ObservableField<>(); 
    @Bindable 
    public final ObservableInt age = new ObservableInt(); 
} 
Problemi correlati