2017-06-15 152 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