Влияние идентификаторов ресурсов на ButterKnife не будет окончательным в Android Gradle Plugin версии 5.0, избегайте их использования в качестве атрибутов аннотаций.

Я использую аннотированные атрибуты во всем своем проекте Android для привязки Views и событий к полям и методам.

@BindView(R.id.textViewOrderId)
TextView textViewOrderId;

@OnClick(R.id.buttonDateFilter)
public void onButtonDateFilter(View view) {...}

Миграция с ButterKnife стала немного дороже. Я хотел бы прояснить несколько вещей об этом новом изменении плагина Gradle,

  • Как неконечные идентификаторы ресурсов повлияют на мой текущий проект?
  • Придется ли мне навсегда отказаться от ButterKnife, если я обновлю плагин Gradle?
  • Насколько эффективен класс R2, упомянутый в этой записи Reddit?

person Roshana Pitigala    schedule 14.10.2020    source источник


Ответы (2)


На это до сих пор нет ответа. Но я полагаю, что нет другого выхода, кроме как заменить ButterKnife альтернативой, скорее всего, View Привязка.

Как указано в этой статье, View Binding Tutorial для Android: Начало работы:

Кроме того, разработка ButterKnife подходит к концу. Джейк Уортон, создатель этой библиотеки, отказывается от нее в пользу View Binding.

Со страницы ButterKnife GitHub:

Внимание! Этот инструмент устарел. Пожалуйста, переключитесь на просмотр привязки. Существующие версии, очевидно, продолжат работать, но будут рассмотрены только исправления критических ошибок для интеграции с AGP. Разработка функций и исправление общих ошибок остановлены.

person Big_Chair    schedule 16.10.2020
comment
Что, если мы используем держатель представления в recyclerView? Я не думаю, что ожидание представления все еще работает в этих обстоятельствах. Так что опять очередная беда для разработчиков. - person Kimi Chiu; 24.02.2021
comment
В Kotlin нет необходимости использовать привязку представления, потому что расширения kotlin для Android делают это лучше. Тем не менее, нам все еще нужно установить onClickListener в коде, так что это не альтернатива ножу для масла. - person user1209216; 31.03.2021
comment
@Kimi Chiu Вы наверняка можете использовать привязку представления в держателе просмотра. Вы просто передаете объект привязки в конструктор ViewHolder вместо представления, а затем вызываете super для .getRoot() того, что вы передали. Для этого в OnCreateViewHolder вы просто return new ViewHolder(ItemViewBinding.inflate(LayoutInflater.from(parent.getcontext(), parent, false)); конструктор выглядит так: public ViewHolder(ItemViewBinding vb) { super(vb.getRoot()); } - person Riot Goes Woof; 02.06.2021

Как предложил Джейк Уортон, вы можете применить плагин Butterknife и использовать R2 вместо R для доступа к идентификаторам ресурсов.

person Ridcully    schedule 29.10.2020
comment
не могли бы вы разместить ссылку здесь для этой информации, пожалуйста? Где R2 упоминается Джейком. - person Kidus Tekeste; 19.12.2020
comment
@KidusTekeste тем временем мы также используем привязку просмотра, и ее довольно приятно использовать. Я считаю, что решение R2 не идеально в долгосрочной перспективе, так как Butterknife больше не продолжается. - person Ridcully; 19.12.2020
comment
@Kidus ссылка в вопросе. - person Roshana Pitigala; 20.12.2020
comment
@RoshanaPitigala спасибо. Нашла ???? - person Kidus Tekeste; 20.12.2020