#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)
Не очень элегантное решение.