6

Patrzę na nową wtyczkę Data Binding dla Androida i próbuję zintegrować ją w projekcie.Nie można odwoływać się do pól klasy obserwowalnej z layoutu xml

Podczas czytania o tworzeniu obserwowalnych obiektów, ja spotkałem się z dokumentacją ObservableFields który polega na wykorzystaniu samodzielne obserwowalne obiekty przykład z dokumentacją:

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(); 
} 

Przede fragmencie byłaby wymiana:

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); 
    } 
} 

Co oznacza znacznie mniej kodu; Jednak przy użyciu obserwowalnych Pola i odniesienie następnie z układu XML, takich jak:

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

ja dostaję ten błąd:

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

I to nie jest gadatliwy w ogóle; Nie używanie ObservableFields działa jak urok.

Documentation reference

Każdy obliczu tego problemu? Myśli?

+0

Opublikuj xml dla układu, proszę? – fakataha

+0

@atamakosi tutaj idziemy! –

+0

Czy w pierwszym przypadku musimy dodać rozszerzenia "BaseObservable"? – Debanjan

Odpowiedz

5

To wygląda jak błąd po naszej stronie. Słyszałem, że dodanie @Bindable rozwiązuje problem, ale powiązanie danych powinno być w stanie go znaleźć bez adnotacji . Stworzyłem wewnętrzny błąd, dzięki.

+3

Dziękuję za to. Może warto zaktualizować dokumentację z bindable na razie? Pozdrawiam –

+1

fyi, poprawka zostanie wydana w rc1 – yigit

1

ObservableField należy opatrzyć komentarzem za pomocą adnotacji @Bindable, aby ją skompilować.

źródłem stanów adnotacji Bindable:

this is necessary for java analyzer to work

Tak kończy się ona wygląda tak:

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(); 
}