我有这样的模型
public class MyCheckedVM extends BaseObservable {
@Bindable
ObservableBoolean observableBoolean = new ObservableBoolean();
@Bindable
public ObservableBoolean getObservableBoolean() {
return observableBoolean;
}
@Bindable
public void setObservableBoolean(ObservableBoolean observableBoolean) {
this.observableBoolean = observableBoolean;
}
public void onCheckChanged(CompoundButton view, boolean isChecked) {
Log.d(TAG, "onCheckChanged");
}
这个模型我设置为主活动绑定ToggleButton
和Fragment
里面也有这样的按钮
<ToggleButton
android:onCheckedChanged="@{viewModel.onCheckChanged}"
android:checked="@{viewModel.observableBoolean}"
android:id="@+id/toggle"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
但是当我尝试点击任何按钮时,它们都会彼此独立地变化。将模型绑定到Fragmnet
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
FragmentExampleBinding fragmentExampleBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_example, container, false);
fragmentExampleBinding.setViewModel(((MainActivity) getActivity()).getViewModel()); //getter in MainActivity for instance of viewModel
return fragmentExampleBinding.getRoot();
}
答案 0 :(得分:2)
我看到的一个问题是您使用setObservableBoolean
。您有一个BaseObservable
,因此如果您致电设置者,则应通知酒店更改。
但这只是因为你以不寻常的方式使用ObservableBoolean
。最佳做法是始终将它们用作public final
字段。如果这样做,则不需要使用BaseObservable
作为基类:
public class MyCheckedVM {
public final ObservableBoolean observableBoolean = new ObservableBoolean();
public void onCheckChanged(CompoundButton view, boolean isChecked) {
Log.d(TAG, "onCheckChanged");
}
}
您可以在Observable类(或BaseObservable)中混合可观察字段。只需创建可观察字段public final
,并确保在可绑定属性的setter中调用notifyPropertyChanged(BR.myField)
。