2017-06-15 151 views
1

我使用BindingAdapter来实现TextInputLayout字段的验证。我的对象有一个ObservableBoolean'有效',当被更改时将执行我的绑定适配器来设置/清除字段上的错误消息。它的伟大工程,但我现在看到下面的警告,希望解决这个问题:BindingAdapter弃用警告

警告:ObservableField和原始表兄弟直接用作 方法参数已被弃用,支持将很快被移除。使用 内容作为参数,而不是方法BindingUtils.setError

适配器:

@BindingAdapter({"error", "errorMsg"}) 
public static void setError(TextInputLayout view, ObservableBoolean isValid, String errorMsg){ 
    String errorString = isValid.get() ? null : errorMsg; 
    view.setError(errorString); 
} 

而且绑定表达式:

<android.support.design.widget.TextInputLayout 
     app:error="@{viewModel.name.valid}" 
     app:errorMsg="@{@string/template_details_error_name_required}" 

为了解决这个问题,我修改了适配器和绑定表达如下,但这导致新的弃用警告:

警告:不要在 表达式中显式调用ObservasbleFields上的'get()'。该支持即将被移除。 'viewModel.name.valid.get()'

修改适配器:

@BindingAdapter({"error", "errorMsg"}) 
public static void setError(TextInputLayout view, Boolean isValid, String errorMsg){ 

修改绑定表达式:

<android.support.design.widget.TextInputLayout 
    app:error="@{viewModel.name.valid.get()}" 
    app:errorMsg="@{@string/template_details_error_name_required}" 

什么是现在要达致这所推荐的方法是什么?

此相关线程 Android Databinding BindingAdapter Error 问题在BindingAdapters中是否存在Observables的有效用例。也许这是一个。

回答

3

你只应该改变适配器本身。 ObservableBoolean在布局中自动解包。

@BindingAdapter({"error", "errorMsg"}) 
public static void setError(TextInputLayout view, boolean isValid, String errorMsg){ 
    String errorString = isValid ? null : errorMsg; 
    view.setError(errorString); 
} 

<android.support.design.widget.TextInputLayout 
    app:error="@{viewModel.name.valid}" 
    app:errorMsg="@{@string/template_details_error_name_required}" 

但是你的属性名称和参数名称不匹配以及语义。

+0

感谢您解释类型是为您打包的。现在完美运作。 – sidecarcat