Как привязать слушателя во время выполнения с помощью Butter Knife?

#android #butterknife

#Android #butterknife

Вопрос:

Возможно ли привязать слушателя, такого как onclick, во время выполнения с помощью Butter Knife? Я хочу передать представления, определенные во время выполнения, методу, и в рамках этого метода привязать к ним слушателя. Я знаю, как выполнить то, что я хочу сделать обычными средствами, поэтому я строго спрашиваю о Butter Knife.

Ответ №1:

Политика хранения аннотаций CLASS Butterknife означает, что аннотированные поля идентифицируются (как аннотированные) компилятором, но не виртуальной машиной. Привязка значений происходит во время выполнения. Это означает, что все поля и методы предварительно аннотируются, а позже Butterknife имеет карту всех полей и методов с сгенерированными классами, которые необходимо привязать. Butterknife TL; DR

Вызов ButterKnife.bind(mRequiredView) попытается привязать методы / поля в этом представлении. Пожалуйста, имейте в виду, что если идентификатор представления не существует, наиболее очевидно, что Butterknife будет жаловаться.

Другой способ сделать это — обернуть ваш метод внутри другого (внутреннего) класса, который будет работать как целевой объект.

 private static class BindWrapper{

  @OnClick(R.id.view_later_to_be_bind)
  public void onClickedView(View v){


  }

}
 

Экземпляр этого вспомогательного класса будет использоваться для привязки представлений, таких как:

 //somewhere in the code where we need to bind the listener
BindWrapper target = new BindWrapper();
ButterKnife.bind(target, mRequiredView)
 

Не очень элегантное решение.