В документации по расширению Kotlin для Android говорится, что вы можете сократить путь findViewById()
, используя оператор импорта. Однако в чем разница между импортом определенного представления kotlinx.android.synthetic.main.<layout-file-name>.<view-id>
и импортом из kotlinx.android.synthetic.main.<layout-file-name>.view.<view-id>
? Если вы сделаете первое, IDE покажет мне три одинаковых идентификатора представления, по одному для Activity, Dialog и Fragment. Если вы сделаете последнее, оно покажет имя идентификатора представления только один раз.
Разница синтетических свойств Kotlin для представлений Android?
Ответы (1)
Подсказки IDE показывают типы классов, в которых можно использовать ссылку на представление: Activity, Fragment, Dialog или View. Когда вы вводите оператор импорта, среда IDE показывает завершение для всех доступных типов. Однако, когда вы пытаетесь использовать его внутри класса (без оператора импорта), IDE показывает вам подсказку импорта для конкретного типа, который расширяет ваш класс.
Например, внутри класса активности, расширяя AppCompatActivity
, вы получаете подсказку об импорте.
<view-id> from <layout-file-name> for Activity
Однако, если ваш класс расширяется от View
или подклассов, вы получаете следующее:
<view-id> from <layout-file-name> for View
Что касается того, почему существует несколько вариантов, реализация кэширования представлений может различаться для разных типов. Подробнее об этом