是否可以在@Bindable上添加onOnPropertyChangedCallback?

mel*_*nke 0 android android-databinding

我想观察一个@Bindable通过Java,可以吗?

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

但有时您需要原始字段,而最好的方法是使用@Bindable。

Geo*_*unt 5

Sure you can. If you have a field marked with @Bindable and implement Observable, you can listen for changes to that field. Any bindable field must notify when changed. For example:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

You can then listen for changes on this object. I used BaseObservable as the base class for this data class because it implements the observability for me.

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
            }
        }
    });
}
Run Code Online (Sandbox Code Playgroud)