Ссылка на свойства класса Observable в макете привязки данных Android

Каков тип свойства класса Observable который getter аннотируется как @Bindable в структуре @Bindable данных Android?

Например, пусть класс Observable определяется следующим образом:

 class Localization() : BaseObservable() { var translation: (key: String) -> String by Delegates.observable(defaultTranslation) { _, _, _ -> notifyPropertyChanged(BR.translation) } @Bindable get } 

Формат XML будет выглядеть примерно так:

 <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="translation" type="WHAT IS THE TYPE OF TRANSLATION?" /> </data> <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{translation.invoke(stringKey)}" /> </FrameLayout> </layout> 

Вопрос в том, что добавить атрибут типа variable «перевод».

Я пробовал:

 type="kotlin.jvm.functions.Function1&lt;String, String&gt;" 

Он компилируется, но TextView не обновляется при изменении свойства перевода.

Я могу добиться желаемого поведения, введя переменную localization в XML-макете и затем вызывая localization.translation.invoke() в выражении привязки. Мне просто не нравится это, и я хочу знать, могу ли я напрямую ссылаться на translation .

Localization расширяет BaseObservable а Function1 вообще не наблюдается. Таким образом, использование Localization дает вам интерфейс для наблюдения за изменениями свойств.

Если вы привязываете translation , это простое поле, которое устанавливается. Если вы хотите его обновить, вам придется снова вызвать setTranslation() .

Intereting Posts
Android Kotlin: Ошибка Неразрешенная ссылка: DaggerAppComponent Какое правильное название для встроенной документации Kotlin? RecyclerView с Kotlin не выставляет ячейки по вертикали Создание ArrayList уникальных элементов в ArrayList Статус состояния Vault для UNONSUMED / CONSUMED Почему код в выражении объекта может обращаться к переменным из области, содержащей его в kotlin? Как получить правильный тип при возврате шаблона <T?> Из статической функции с нулевым значением Kotlin 1.0.0-rc-1036 проблемы с обработкой аннотации Что такое конфигурация generateStubs в Котлине? Котлин Абстрактное защищенное свойство Как реорганизовать представление, чтобы разрешить фильтрацию элементов, привязанных к наблюдаемомуArrayList, внутри приложения tornadofx Как связать общие типы двух параметров функции Kotlin? Компиляция не выполняется с помощью Gradle и Kotlin Создание нового экземпляра KClass Основная архитектура клиентской игры Kotlin