BindingAdapter 弃用警告
BindingAdapter deprecation warnings
我使用 BindingAdapter 来实现对 TextInputLayout 字段的验证。我的对象有一个 ObservableBoolean 'valid',当更改时将执行我的绑定适配器到 set/clear 字段上的错误消息。它工作得很好,但我现在看到以下警告并希望解决它:
Warning: Use of ObservableField and primitive cousins directly as
method parameters is deprecated and support will be removed soon. Use
the contents as parameters instead in method 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}"
为了解决这个问题,我修改了适配器和绑定表达式如下,但这导致了新的弃用警告:
Warning: Do not explicitly call 'get()' on ObservasbleFields in an
expression. This support will be removed soon.
'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}"
现在实现此目标的推荐方法是什么?
这个相关话题
质疑 BindingAdapters 中是否存在 Observables 的有效用例。也许这是一个。
您只需更换适配器本身。 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}"
但是您的属性名称和参数名称在语义上不匹配。
我使用 BindingAdapter 来实现对 TextInputLayout 字段的验证。我的对象有一个 ObservableBoolean 'valid',当更改时将执行我的绑定适配器到 set/clear 字段上的错误消息。它工作得很好,但我现在看到以下警告并希望解决它:
Warning: Use of ObservableField and primitive cousins directly as method parameters is deprecated and support will be removed soon. Use the contents as parameters instead in method 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}"
为了解决这个问题,我修改了适配器和绑定表达式如下,但这导致了新的弃用警告:
Warning: Do not explicitly call 'get()' on ObservasbleFields in an expression. This support will be removed soon. '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}"
现在实现此目标的推荐方法是什么?
这个相关话题
您只需更换适配器本身。 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}"
但是您的属性名称和参数名称在语义上不匹配。