ObservableField不传播更改

Bri*_*6ko 2 data-binding android android-databinding

我正在尝试Android的数据绑定功能,并且Observable字段似乎不会将更改传播到UI。

如果我扩展BaseObservable该类,那么一切都会按预期工作,但是,当我切换到ObservableBooleanObservableField数据更改时,它并没有传播到UI。

该模型

public class User {
  public final ObservableBoolean tapped = new ObservableBoolean(false);

    public boolean isTapped() {
        return tapped.get();
    }

    public void setTapped(boolean tapped) {
        this.tapped.set(tapped);
    }
}
Run Code Online (Sandbox Code Playgroud)

布局

<layout 
    <data>
        <variable
            name="user"
            type="User"/>
          ....
    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:background="@{user.tapped ? @color/colorAccent : @color/white}"
        android:onClick="@{() -> user_holder.onClickTest(user)}">

        ......
    </LinearLayout>
</layout>
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Geo*_*unt 5

看起来您已经混淆了糟糕的数据绑定系统。您不仅有一个公共领域,而且还拥有它的获取者和委托者。Android数据绑定首先尝试绑定到getter,如果失败,则绑定到该字段。

如果您更改方法中使用的名称(例如)的名称isPersonTapped()setPersonTapped(...)则不会有问题。由于您具有访问器方法,因此您还可以使用私有字段并自己通知更改:

public class User extends BaseObservable {
    private boolean tapped = false;

    @Bindable
    public boolean isTapped() {
        return tapped;
    }

    public void setTapped(boolean tapped) {
        this.tapped = tapped;
        notifyPropertyChanged(BR.tapped);
    }
}
Run Code Online (Sandbox Code Playgroud)