2015-12-15 22 views
9

Tôi đang sử dụng thư viện ràng buộc dữ liệu của Android. Tôi có đối tượng dữ liệu mở rộng BaseObservable.Android: Databinding, notifyPropertyChanged() không hoạt động?

public static class SimpleData extends BaseObservable implements Serializable { 
    private String text, subText; 
    private SpannableString totalText; 
@Bindable 
    public SpannableString getTotalText() { 
     return totalText; 
    } 

    public void setTotalText(SpannableString totalText) { 
     this.totalText = totalText; 
     notifyPropertyChanged(BR.totalText); 
    } 
} 

Và xml của tôi là binded cũng

<TextView 
       android:id="@+id/patient_name" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:layout_marginLeft="16dp" 
       android:layout_toRightOf="@+id/patient_image" 
       android:textColor="@color/primary_text" 
       android:text="@{object.getTotalText()}" 
       /> 

Các ràng buộc xảy ra cho các giá trị ban đầu. Nhưng khi tôi thay đổi giá trị bằng cách sử dụng

object.setTotalText(someSpannableString); 

các thay đổi không được phản ánh trong chế độ xem văn bản. Điều gì có thể là vấn đề?

+0

bạn có thể giải quyết vấn đề của mình không? –

+0

@mahdipishguy: Không thưa ngài. Sự cố chưa được giải quyết – Ashwin

Trả lời

6

Sử dụng tên trường trong phạm vi của getter.

<TextView 
       android:id="@+id/patient_name" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:layout_marginLeft="16dp" 
       android:layout_toRightOf="@+id/patient_image" 
       android:textColor="@color/primary_text" 
       android:text="@{object.totalText}"/> 
+0

có vẻ không chính xác, bạn nên sử dụng lớp 'BR' để xác định trường _AND_ có cả bộ đặt và getter được chú thích bằng' @ Bindable' – LambergaR

1

Tôi vừa gặp vấn đề tương tự. Sự ràng buộc của tôi sẽ làm việc lần đầu tiên và sau đó sẽ không hoạt động lần thứ hai.

Tôi đã thiết lập giống hệt cho bạn ngoại trừ tôi đã đặt @Bindable trên thiết lập của tôi chứ không phải phương thức getter của tôi.

Thêm @Bindable cho cả người đặt hàng và người trợ giúp của tôi đã khắc phục sự cố này cho tôi.

Khi tôi sửa lỗi người lao động bên trong của dữ liệu ràng buộc thư viện tôi nhận thấy rằng một phương pháp gọi là yêu cầu tái ràng buộc đã không được gọi vì nó đã làm một hoạt động để kiểm tra xem lĩnh vực này đã được cập nhật hay không từ giá trị cuối cùng. Tôi đoán là bạn cần chú thích trên cả hai phương thức để có thể thực hiện xác nhận nội bộ này để kiểm tra xem nó có cần phải liên kết lại hay không.

Tôi không phải là 100% nếu điều này có đúng hay không, nhưng việc chú thích trên cả hai phương pháp đều khắc phục được sự cố của tôi. Nhìn vào tài liệu thư viện Data Binding, tôi nhận thấy rằng họ chỉ hiển thị chú thích trên getter.

Bạn có thể thử:

@Bindable 
public SpannableString getTotalText() { 
    return totalText; 
} 

@Bindable 
public void setTotalText(SpannableString totalText) { 
    this.totalText = totalText; 
    notifyPropertyChanged(BR.totalText); 
} 

Xem nếu nó giải quyết nó.

Các vấn đề liên quan