BindingAdapter弃用警告

时间:2017-06-15 15:02:34

标签: android android-databinding

我使用BindingAdapter来实现TextInputLayout字段的验证。我的对象有一个ObservableBoolean'有效',当更改时将执行我的绑定适配器来设置/清除该字段上的错误消息。它工作得很好但我现在看到以下警告并希望解决它:

  

警告:直接使用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的有效用例。也许这就是一个。

1 个答案:

答案 0 :(得分: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}"

但是您的属性名称和参数名称在语义上不匹配。