可以在@Bindable上添加OnPropertyChangedCallback吗?

时间:2017-11-23 17:50:38

标签: android android-databinding

我想通过Java观察@Bindable,是否可能?

我读到我可以在这个答案上观察一个ObservableField: https://stackoverflow.com/a/31885802/858257

但有时您需要原始字段,最佳方法是使用@Bindable

1 个答案:

答案 0 :(得分:4)

当然可以。如果您有一个标有@Bindable的字段并实施Observable,则可以监听该字段的更改。任何可绑定字段必须在更改时通知。例如:

public class Item extends BaseObservable {
    private String name;
    private int stockCount;

    @Bindable
    public String getName() { return name; }
    public void setName(String name) {
        this.name = name;
        notifyPropertyChanged(BR.name);
    }

    @Bindable
    public int getStockCount() { return stockCount; }
    public void setStockCount(int stockCount) {
        this.stockCount = stockCount;
        notifyPropertyChanged(BR.stockCount);
    }
}

然后,您可以侦听此对象的更改。我使用BaseObservable作为此数据类的基类,因为它实现了对我的可观察性。

public void listenForStockChange(Item item) {
    item.addOnPropertyChangedCallback(new OnPropertyChangedCallback() {
        @Override
        public void onPropertyChanged(Observable sender, int propertyId) {
            if (propertyId == BR.stockCount) {
                Item item = (Item) sender;
                // Do whatever you want when the stock changes
            }
        }
    });
}