Я пытаюсь использовать живые данные с привязкой данных для TextInputLayout
, используя такой класс:
class MutableLiveDataWithErrorText<T> : MutableLiveData<T>() {
val errorText = MutableLiveData<String>().apply { value = "" }
}
Теперь, когда пытаюсь использовать его для текста ошибки в xml,
<layout>
<data>
<!-- ... -->
<variable
name="target"
type="com.my.app.MutableLiveDataWithErrorText<String>" />
</data>
<com.google.android.material.textfield.TextInputLayout
app:errorEnabled="true"
app:errorText="@{target.errorText}">
<!-- ... -->
</com.google.android.material.textfield.TextInputLayout>
</layout>
Я получаю эту ошибку:
Cannot find getter 'getErrorText' for type String.
Я попытался создать BindingAdapter, чтобы обойти это:
@BindingAdapter("errorTextLive")
fun setErrorTextLive(
view: TextInputLayout,
liveDataWithErrorText: MutableLiveDataWithErrorText<String>
) {
if (liveDataWithErrorText.errorText.value.isNullOrEmpty().not()) {
view.error = liveDataWithErrorText.errorText.value
}
}
с назначением xml, измененным на:
app:errorTextLive="@{target}"
, что делает компиляцию успешной, но изменения target.errorText
больше не наблюдаются, вместо этого он наблюдает изменения в target
, обновляя errorText
только при изменении значения target
.
Есть ли способ заставить его соблюдать target.errorText
?