2017-02-10 10 views
3

Я заметил, что синтетические свойства Kotlin не работают на CustomViews. Я не знаю, если это предназначено или нет. При чтении сгенерированного класса java я вижу, что кеш присутствует:Kotlin Синтетические свойства

private HashMap _$_findViewCache; 

, но он никогда не используется. Вместо этого, когда требуется просмотр, вызывается findViewById. Это поведение по умолчанию? Синтетические свойства действуют только на действия и фрагменты?

+0

Поля '_ $ _ findViewCache' автоматически генерируются в' Activity' и 'Fr agment'. У вас есть '_ $ _ findViewCache' внутри пользовательского класса View? – yanex

+0

есть. генерируется код (есть карта и функция кеша). Но доступ к свойству через syntehetic переводится в байтовый код findViewById (я вижу его через опцию «Kotlin Bytecode») –

+0

это очень важно, если это ошибка. особенно в представлениях, которые выполняют анимацию, в которой findViewbyId вызывается так много раз. Дайте мне знать, если вам нужна дополнительная информация –

ответ

1

This works now. Blog post on kotlin-android-extensions

Пользовательский класс должен иметь кэш сгенерирован и использовать его:

itemTitle.text = "Hello World!" 

это в пользовательском классе зрения, становится:

((TextView)this._$_findCachedViewById(id.itemTitle)).setText((CharSequence)"Hello World!"); 

используя кэш правильно