ButterKnife
- старое решение для привязки представления. Он имеет меньший шаблонный код, чем старый findviewbyId
способ, но из-за annotation processors
он влияет на скорость сборки и не обеспечивает Null safety
и Type safety
. Лучшее решение - kotlinx.android.synthetic
, которое вы использовали в своем примере, но оно также имеет некоторые проблемы. Например, если вы зададите для своего представления содержимого макет, а затем введите идентификатор, который существует только в другом макете, среда IDE позволяет выполнять автозаполнение и добавлять новый оператор импорта. Если разработчик не проверит, чтобы убедиться, что его операторы импорта импортируют только правильные представления, нет безопасного способа убедиться, что это не вызовет проблем во время выполнения. Поскольку все глобально, нужно быть осторожным, чтобы убедиться, что они используют только те представления, которые ожидают, и игнорировать автозаполнение. DataBinding
и ViewBinding
- лучшие решения на данный момент. Они похожи на первый взгляд. Оба генерируют классы привязки, которые вы можете использовать для ссылки на представления напрямую с поддержкой Null safety
и Type safety
, но есть различия:
DataBinding
подход требует, чтобы вы добавили тег <layout>
к вашемуМакет XML для включения процесса привязки данных ViewBinding
не поддерживает переменные макета или выражения макета, поэтому его нельзя использовать для привязки макетов к данным в XML
ViewBinding
быстрее, чем DataBinding
во время сборки, потому что он не использует процессоры аннотаций.