6

Tôi đang xem plugin Binding mới cho Android và cố gắng tích hợp nó trong một dự án.Không thể tham chiếu các trường Lớp quan sát được từ bố cục xml

Trong khi đọc về việc tạo đối tượng quan sát được, tôi gặp phải những tài liệu ObservableFields đó liên quan đến việc sử dụng khép kín đối tượng quan sát ví dụ từ tài liệu:

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

Trên đoạn sẽ là một thay thế:

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

Đó là mã ít hơn đáng kể; Nhưng khi sử dụng Fields Quan sát và tài liệu tham khảo sau đó từ cách bố trí XML như ví dụ:

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

Tôi nhận được lỗi này:

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

Và đó không phải là tiết ở tất cả; Không sử dụng ObservableFields hoạt động như một sự quyến rũ.

Documentation reference

Bất kỳ ai đối mặt với vấn đề này? Suy nghĩ?

+0

Đăng xml cho bố cục, vui lòng? – fakataha

+0

@atamakosi ở đây chúng tôi đi! –

+0

Chúng ta có phải thêm mở rộng "BaseObservable" trong trường hợp đầu tiên? – Debanjan

Trả lời

5

này trông giống như một lỗi trên cuối của chúng tôi. Tôi nghe nói việc thêm @Bindable sẽ khắc phục sự cố nhưng ràng buộc dữ liệu sẽ có thể tìm thấy nó với chú thích Bindable. Tôi đã tạo ra một lỗi nội bộ, cảm ơn.

+3

Cảm ơn bạn vì điều đó. Có lẽ nó là giá trị cập nhật các tài liệu với bindable trong thời gian này? Chúc mừng –

+1

fyi, bản sửa lỗi sẽ được phát hành trong rc1 – yigit

1

ObservableField cần được chú thích với chú thích @Bindable để biên dịch.

The Source cho các tiểu bang chú thích Bindable:

this is necessary for java analyzer to work

Vì vậy, nó sẽ trông như thế này:

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(); 
} 
Các vấn đề liên quan