我知道Android的数据绑定库的目的是观察数据并在数据发生变化时自动更新.
问题:数据是否可以观察其他数据?例如,我可以有一个ObservableField"依赖"或"绑定"另一个或一组其他ObservableFields的值吗?目前,我已经手动实现了这一点 - 每当任何"dependee" ObservableField发生变化时,我都会计算相关字段并更新其值.
我的用例是我希望所有"逻辑"都在View之外 - 所以我想把我所有的逻辑放在"数据"类中(ViewModel如果可能的话).我有一个按钮,其状态我想设置为启用/禁用,具体取决于其他几个字段的内容.这个例子说明了我的想法.
我的布局文件看起来像这样
<layout>
<data>
<variable name="register" class="com.example.RegisterViewModel"/>
</data>
<LinearLayout>
<EditText
android:id="@+id/edUsername"
android:text="@{register.username}"/>
<EditText android:id="@+id/edPassword" />
<EditText android:id="@+id/edConfirm" />
<Button android:text="Register" android:enabled="@{register.isValid}" />
</LinearLayout>
</layout>
Run Code Online (Sandbox Code Playgroud)
而且,我的View代码如下:
class RegisterView extends View {
@Override
protected void onFinishInflate() {
RegisterViewBinding binding = DataBindingUtil.bind(this);
RegisterViewModel register = new RegisterViewModel();
binding.setRegister(register);
binding.edPassword.setOnFocusChangeListener(new OnFocusChangeListener(){
@Override public void onFocusChange(View v, boolean hasFocus){
register.updateUsername(edPassword.getText().toString());
}
});
//Similarly for other fields.
} …Run Code Online (Sandbox Code Playgroud)