Давайте рассмотрим эти два.
Конфигурация
Расширения Kotlin для Android
- Импортируйте соответствующие синтетические расширения макета:
import kotlinx.android.synthetic.main.<layout>.*
- Ссылка на представления в коде через их идентификаторы:
textView.text = "Hello, world!"
. Эти расширения работают с: Activities
, Fragments
и Views
.
Просмотр привязки
- Создайте ссылку привязки внутри вашего класса:
private lateinit var binding
YourClassBinding
- Надуйте свой переплет
binding = YourClassBinding.inflate(layoutInflater)
внутри onCreate
Activity
и вызовите setContentView(binding.root)
, или накачайте его в Fragment
onCreateView
, а затем верните: return binding.root
- Ссылочные представления в коде через привязку с использованием их идентификаторов
binding.textView.text = "Hello, world!"
Безопасность типов
Расширения Kotlin для Android и ViewBinding по определению являются типобезопасными, поскольку указанные представления уже приведены к соответствующим типам.
Нулевая безопасность
Расширения Kotlin для Android и ViewBinding являются нулевыми. ViewBinding здесь не имеет преимуществ. В случае KAE, если представление присутствует только в некоторых конфигурациях макета, IDE укажет вам на это:
Таким образом, вы просто относитесь к нему как к любому другому типу, допускающему значение NULL, в Kotlin, и ошибка исчезнет:
Применение изменений макета
В случае Kotlin Android Extensions изменения макета мгновенно переводятся в создание синтетических расширений, поэтому вы можете сразу же их использовать. В случае ViewBinding вам необходимо создать свой проект.
Неправильное использование макета
В случае Kotlin Android Extensions можно импортировать синтетические расширения неправильного макета, что приведет к NullPointerException
. То же самое относится к ViewBinding, поскольку мы можем импортировать неправильный Binding
класс. Тем не менее, более вероятно, что неправильный импорт будет пропущен из виду, чем неправильное имя класса, особенно если файл макета правильно назван после _17 _ / _ 18 _ / _ 19_, поэтому ViewBinding здесь имеет преимущество.
Резюме KAE и ViewBinding
- Безопасность шрифта - Рисование.
- Нулевая безопасность - Нарисуйте.
- Шаблонный код - выигрывает KAE. Из документации по расширениям Kotlin для Android:
Плагин Kotlin Android Extensions позволяет нам получить тот же опыт, что и с некоторыми из этих библиотек, без необходимости добавлять какой-либо дополнительный код.
- Применение изменений макета - выигрывает KAE. В отличие от ViewBinding, изменения происходят мгновенно.
- Использование неправильного макета - ViewBinding побеждает
Я думаю, что существует большое заблуждение о том, что ViewBinding заменяет KAE. Люди слышат длинные ключевые слова и повторяют их, не проверяя их заранее. Конечно, ViewBinding - лучший вариант для разработки Java прямо сейчас (замена ButterKnife), но у Kotlin нет или мало преимуществ перед KAE ( см. раздел Использование неправильного макета).
Примечание: я уверен, что людям, использующим DataBinding, понравится ViewBinding :)
person
xinaiz
schedule
19.10.2019