绑定适配器弃用警告



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

警告:直接使用 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 数据绑定绑定适配器错误 质疑绑定适配器中是否存在有效的可观察量用例。也许这是其中之一。

您只需要更改适配器本身。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}"

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

最新更新